52分求助
查看原帖
52分求助
1095195
aliah楼主2024/5/8 16:41

好多个WA,一共52分,第一个错的是8号测试点,已经下载,答案是131380,我这个程序算的是131382,实在找不出来多算的那俩是哪里来的了,求助

#include<bits/stdc++.h>
using namespace std;
int a[500000];
int k=1;
int main()
{
	int n,i,j,x,y,z,t;
	long long ans;
	cin>>n;
	ans=n-1;
	a[0]=0x7fffffff;
	for(i=1;i<=n;i++)
	{
		cin>>x;
		if(x<=a[k-1])
		{
			a[k]=x;
			k++;
			t=k;
			while(t>2 && a[t-1]==a[t-2])
			{
				t--;
				ans++;
			}
		}
		else
		{
			y=0;
			z=k;
			while(z-y>1)
			{
				t=(y+z)/2;
				if(a[t]>x)
					y=t;
				else
					z=t;
			}
			while(y>0 && a[y]<=x)
				y--;
			while(y<k && a[y]>x)
				y++;
			if(y==1)
				ans+=k-y-1;
			else
				ans+=k-y;
			while(a[y]==x)
				y++;
			a[y]=x;
			k=y+1;
		}
	}
	cout<<ans;
	return 0;
} 
2024/5/8 16:41
加载中...