代码求调
查看原帖
代码求调
671779
__Aha楼主2024/7/4 20:26

P8010 「Wdsr-3」令人感伤的红雨

WA9 15pts 求调

#include<bits/stdc++.h>
using namespace std;
int n,q;
int a[6000010],f[6000010];
int mn[6000010],ab[6000010];
int las,nex[6000010],val[6000010],tag[6000010];
int find(int x)
{
	if(x!=f[x])
	{
		f[x]=find(f[x]);
		return f[x];
	} 
	return x;
}

int main()
{
	scanf("%d%d",&n,&q);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		f[i]=i;
		if(a[i]>=mn[i-1])
		{
			mn[i]=a[i];
			ab[i]=i;
			val[i]=mn[i];
			nex[i]=-1;
			nex[las]=i;
			las=i;
		}
		else
		{
			mn[i]=mn[i-1];
			ab[i]=ab[i-1];
			f[i]=f[i-1];
		}
	}
	int op,x,y;
	while(q--)
	{
		scanf("%d%d%d",&op,&x,&y);
		if(op==1)
		{
			int fx=find(x),sum=0;
			tag[fx]+=y;
			sum=tag[fx];
			for(int i=nex[fx];;i=nex[i])
			{
				nex[fx]=i;
				if(i==-1||val[i]>=val[fx]+sum) break;
				sum+=tag[i];
				f[i]=f[fx];
			}
		}
		else
		{
			int num=ab[find(y)];
			if(x<=num&&num<=y)
			{
				printf("0\n");
			}
			else
			{
				printf("%d\n",x-num);
			}
		}
	}
	return 0;
}
2024/7/4 20:26
加载中...