代码求调,悬关
查看原帖
代码求调,悬关
671779
__Aha楼主2024/7/10 07:39

P8010 15pts WA

#include<bits/stdc++.h>
//#define int long long
using namespace std;
int n,q,mn,a[6000010],g[6000010],tag[6000010];
int las,f[6000010],nex[6000010],val[6000010];
int find(int x)
{
	if(x!=f[x]) return f[x]=find(f[x]);
	return x;
}
signed main()
{
//	freopen("sequence3.in","r",stdin);
//	freopen("sequence.out","w",stdout);
	cin>>n>>q;
	for(int i=1;i<=n;i++) f[i]=i;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		if(a[i]>=mn)
		{
			mn=a[i];
			g[i]=i;
			val[i]=mn;
			nex[i]=-1;
			nex[las]=i;
			las=i;
		}
		else
		{
			f[i]=f[i-1];
//			g[i]=g[i-1];
		}
//		cout<<f[i]<<" ";
	}
	int op,x,y;
	while(q--)
	{
		cin>>op>>x>>y;
		if(op==1)
		{
			int fx=find(x),sum,u;
			tag[fx]+=y;
			sum=tag[fx];
			for(u=nex[fx];u!=-1&&val[u]<val[fx]+sum;u=nex[u])
			{
				f[u]=fx;
				nex[fx]=nex[u];
				sum+=tag[u];
			}
		}
		else
		{
			cout<<max((int)0,x-g[find(y)])<<endl;
		}
	}
	return 0;
}
2024/7/10 07:39
加载中...