QOJ.ac
QOJ
The 2nd Universal Cup Finals is coming! Check out our event page, schedule, and competition rules!
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#822805 | #8050. Random Permutation | EBeason# | RE | 0ms | 0kb | C++14 | 1.1kb | 2024-12-20 16:42:27 | 2024-12-20 16:42:32 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
#pragma GCC optimize(1, 2, 3, "Ofast", "inline")
int n;
int a[300300];
long long ans=0;
//unordered_map<int,int> l;
struct likemap {
int ma[300300];
int& operator [] (int x) {
return ma[x+100000];
}
}l;
int getl(double p) {
if(abs(0.5-p)<=1e-9) return n;
else return log(5e-7) / (log(2)+log(p)/2+log(1-p)/2);
}
void solve(int x) {
// l.clear();
int mxl=getl(1.0*a[x]/n);
l[0]=1;
int ll=max(1,x-mxl),rr=min(n,x+mxl);
for(int i=x-1,tmp=0;i>=ll;--i) {
if(a[i]<a[x]) --tmp;
else ++tmp;
l[tmp]=l[tmp]+1;
}
long long res=0;
res+=1ll*l[0]+1ll*l[1];
for(int i=x+1,tmp=0;i<=rr;++i) {
if(a[i]<a[x]) --tmp;
else ++tmp;
res+=1ll*l[-tmp]+1ll*l[-tmp+1];
}
ans+=res*a[x];
l[0]=0;
for(int i=x-1,tmp=0;i>=ll;--i) {
if(a[i]<a[x]) --tmp;
else ++tmp;
l[tmp]=0;
}
}
int main() {
// scanf("%d",&n);
n=300000;
for(int i=1;i<=n;++i) {
// scanf("%d",&a[i]);
a[i]=i;
}
// random_shuffle(a+1,a+n+1);
for(int i=1;i<=n;++i) {
solve(i);
// if(i%10000==0) cout<<i<<endl;
}
printf("%lld\n",ans);
return 0;
}
/*
4
1 4 2 3
*/
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Runtime Error
input:
4 1 4 2 3