QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#448569 | #8050. Random Permutation | liqingyang | RE | 0ms | 0kb | C++14 | 865b | 2024-06-19 19:47:51 | 2024-06-19 19:47:51 |
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()
{
freopen("a.in","r",stdin);
freopen("a.ans","w",stdout);
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=n/5/sqrt(max(1,abs(p[i]-(n>>1))));
int j=i,k=i,s1=0,s2=0,sum=1;
f[0]=g[0]=1;
while((j>1||k<n)&&abs(s1)<lim&&abs(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
Dangerous Syscalls
input:
4 1 4 2 3