线段树求调
查看原帖
线段树求调
802664
BYR_KKK楼主2023/9/21 13:44

全WA


#include<bits/stdc++.h>
#define int long long

const int maxm=2e5+10;

int a[maxm];

int cnt;

struct tree{
	int l,r,max,laz;
}s[maxm<<2];

void push_up(int p){
	s[p].max=std::max(s[p*2].max,s[p*2+1].max);
}

void build(int l,int r,int p){
	s[p].l=l,s[p].r=r;
	if(l==r){
		s[p].max=-0x3f3f3f3f;
		return ;
	}
	int mid=(l+r)>>1;
	build(l,mid,p*2);
	build(mid+1,r,p*2+1);
	push_up(p);
}

void upd(int d,int p,int di){
	int l=s[p].l,r=s[p].r;
	if(l==r){
		s[p].max=std::max(s[p].max,d);
		return ;
	}
	int mid=(l+r)>>1;
	if(mid>=di) upd(d,p*2,di);
	else upd(d,p*2+1,di);
	push_up(p);
	return ;
}

int query(int L,int R,int p){
	int l=s[p].l,r=s[p].r;
	if(l>=L&&r<=R) return s[p].max;
	int mid=(l+r)>>1;
	int ans=-0x3f3f3f3f;
	if(mid>=L) ans=std::max(ans,query(L,mid,p*2));
	if(R>mid) ans=std::max(ans,query(mid+1,R,p*2+1));
	return ans;
}

signed main(){
	std::ios::sync_with_stdio(false);
	std::cin.tie(0);
	int m,d;
	std::cin>>m>>d;
	int las=0;
	build(1,maxm,1);
	while(m--){
		char s;
		std::cin>>s;
		if(s=='Q'){
			int l;
			std::cin>>l;
			las=query(cnt-l+1,cnt,1);
			std::cout<<las<<'\n';
		}else {
			int n;
			std::cin>>n;
			cnt++;
			upd((las+(n%d+d)%d)%d,1,cnt);
		}
	}
	return 0;
}

2023/9/21 13:44
加载中...