蒟蒻线段树全是RE求助
查看原帖
蒟蒻线段树全是RE求助
369399
yizhiming楼主2021/3/6 10:32

代码如下,求解,样例过了。

#include <bits/stdc++.h>
using namespace std;
const int N=4e5+10;
long long t=1,cnt;long long m,d;long long ans;
struct node{
	long long lc,rc;
	long long maxn;
}n[N];
void pushup(long long u){
	n[u].maxn = max(n[n[u].lc].maxn,n[n[u].rc].maxn);
	return;
}
void build(int u,int l,int r){
	if(l==r){
		n[u].maxn = 0;
		return;
	}
	long long mid = (l+r)>>1;
	n[u].lc = ++t;
	build(n[u].lc,1,mid);
	n[u].rc = ++t;
	build(n[u].rc,mid+1,r);
	pushup(u);
	return;
}
void updata(long long u,long long l,long long r,long long x,long long y){
	if(l==r){
		n[u].maxn = y;
		return;
	}
	long long mid = (l+r)>>1;
	if(x<=mid){
		updata(n[u].lc,l,mid,x,y);
	}else {
		updata(n[u].rc,mid+1,r,x,y);
	}
	pushup(u);
	return;
}
void query(long long u,long long l,long long r,long long zl,long long zr){
	if(l==zl&&r==zr){
		ans = n[u].maxn;
		//ans = max(ans,n[u].maxn);
		return;
	}
	long long mid = (l+r)>>1;
	if(zr<=mid){
		query(n[u].lc,l,mid,zl,zr);
	}else {
		if(zl>mid){
			query(n[u].rc,mid+1,r,zl,zr);
		}else {
			long long tmp;
			query(n[u].lc,l,mid,zl,mid);
			tmp = ans;
			query(n[u].rc,mid+1,r,mid+1,zr);
			ans = max(ans,tmp);
		}
	}
	return;
}
int main(){
	cin>>m>>d;
	char ch;long long num;
	build(1,1,m);
	for(int i=1;i<=m;i++){
		cin>>ch>>num;
		if(ch=='A'){
			cnt++;
			num = (num+ans)%d;
			updata(1,1,m,cnt,num);
		}else{
			//ans = 0;
			query(1,1,m,cnt-num+1,cnt);
			cout<<ans<<endl;
		}
	}
	return 0;
}
2021/3/6 10:32
加载中...