QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#448569#8050. Random PermutationliqingyangRE 0ms0kbC++14865b2024-06-19 19:47:512024-06-19 19:47:51

Judging History

你现在查看的是最新测评结果

  • [2024-06-19 19:47:51]
  • 评测
  • 测评结果:RE
  • 用时:0ms
  • 内存:0kb
  • [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

output:


result: