代码求调
  • 板块学术版
  • 楼主__Aha
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/5 19:21
  • 上次更新2024/7/5 21:14:10
查看原帖
代码求调
671779
__Aha楼主2024/7/5 19:21

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

15pts

WA9 #6#7#8#10#11#16#17

TLE3 #18#19#20

#include<bits/stdc++.h>
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;
}
int main()
{
	cin>>n>>q;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		f[i]=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];
		}
	}
	int op,x,y;
	while(q--)
	{
		cin>>op>>x>>y;
		if(op==1)
		{
			int fx=find(x),sum=0,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(0,x-g[find(y)])<<endl;
		}
	}
	return 0;
}
2024/7/5 19:21
加载中...