求救,不知道哪里RE了
查看原帖
求救,不知道哪里RE了
339299
osfly楼主2022/3/7 13:35
#include<cstdio>
#define int long long
const int INF=1e13;
int a[200005];
int m,d;
int t;
int len;
struct node
{
	int l,r;
	int maxn;
};
struct seg
{
	node t[800005];
	int max(int a,int b)
	{
		return a>b?a:b;
	}
	void build(int k,int l,int r)
	{
		t[k].l=l,t[k].r=r;
		if(l==r)
		{
			t[k].maxn=a[l];
			return ;
		}
		int mid=(l+r)>>1;
		build(2*k,l,mid);
		build(2*k,mid+1,r);
		t[k].maxn=max(t[2*k].maxn,t[2*k+1].maxn);
	}
	void update(int k,int num,int x)
	{
		if(t[k].l==t[k].r)
		{
			t[k].maxn=num;
			return ;
		}
		int mid=(t[k].l+t[k].r)>>1;
		if(x<=mid) update(2*k,num,x);
		else update(2*k+1,num,x);
		t[k].maxn=max(t[2*k].maxn,t[2*k+1].maxn);
	}
	int query(int k,int l,int r)
	{
		if(t[k].l>=l&&t[k].r<=r) return t[k].maxn;
		int mid=(t[k].l+t[k].r)>>1;
		int ans=-INF;
		if(l<=mid) ans=max(ans,query(2*k,l,r));
		if(r>mid) ans=max(ans,query(2*k+1,l,r));
		return ans;
	}
}tree;
signed main()
{
	scanf("%lld%lld",&m,&d);
	for(int i=1;i<=m;i++) a[i]=-INF;
	tree.build(1,1,m);
	while(m--)
	{
		char op;
		int x;
		scanf(" %c %lld",&op,&x);
		if(op=='Q')
		{
			if(!x) t=0;
			else t=tree.query(1,len-x+1,len);
			printf("%lld\n",t);
		}
		else
		{
			x+=t;
			x%=d;
			tree.update(1,x,++len);
		}
	}
	return 0;
}

连样例都RE,查不动了......

2022/3/7 13:35
加载中...