QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#448610 | #8050. Random Permutation | liqingyang | WA | 1ms | 10112kb | C++14 | 806b | 2024-06-19 20:06:13 | 2024-06-19 20:06:14 |
Judging History
answer
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
int n,p[300010],P[300010];
int F[600010],*f=F+300005;
int G[600010],*g=G+300005;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>p[i];
P[p[i]]=i;
}
long long ans=0;
for(int i=1;i<=n;i++)
{
int lim=2.9e4*3e5/n/pow(max(1,abs(p[i]-(n>>1))),0.4);
int j=i,k=i,s1=0,s2=0,sum=1;
f[0]=g[0]=1;
while((j>1||k<n)&&abs(s1-s2)<lim)
{
if(j>1)
{
j--;
f[s1+=p[j]<p[i]?-1:1]++;
sum+=g[s1]+g[s1-1];
}
if(k<n)
{
k++;
g[s2+=p[k]<p[i]?1:-1]++;
sum+=f[s2]+f[s2+1];
}
}
ans+=(long long)p[i]*sum;
memset(f-(i-j),0,(i-j<<1)+1<<2);
memset(g-(k-i),0,(k-i<<1)+1<<2);
}
cout<<ans<<endl;
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Wrong Answer
time: 1ms
memory: 10112kb
input:
4 1 4 2 3
output:
10
result:
wrong answer 1st numbers differ - expected: '22', found: '10'