线段树求调!除了hack数据全WA!谢谢大佬!
查看原帖
线段树求调!除了hack数据全WA!谢谢大佬!
685191
Science_is_Magic楼主2023/10/2 16:13
#include<bits/stdc++.h>

using namespace std;

const int N=2e5+10;
typedef long long LL;

int m,idx;
LL d;
struct tree{
	int l,r;
	LL maxn=LONG_LONG_MIN;
}tr[N*8];

void push_up(int u){
	tr[u].maxn=max(tr[u<<1].maxn,tr[u<<1|1].maxn);
}

void build(int u,int l,int r){
//	cout<<l<<" "<<r<<endl;
	if(l>r) return;
	tr[u].l=l,tr[u].r=r;
	if(l==r) return;
	int mid=(l+r)>>1;
	build(u<<1,l,mid);
	build(u<<1|1,mid+1,r);
	//push_up(u);
}

void modify(int u,int x,LL f){
	if(tr[u].l==x && tr[u].r==x){
		tr[u].maxn=f;
		return;
	}
	int mid=(tr[u].l+tr[u].r)>>1;
	if(x<=mid) modify(u<<1,x,f);
	else modify(u<<1|1,x,f);
	push_up(u);
}

LL query(int u,int l,int r){
	if(tr[u].l>=l && tr[u].r<=r){
		return tr[u].maxn;
	}
	int mid=(tr[u].l+tr[u].r)>>1;
	LL v=LONG_LONG_MIN;
	if(l<=mid) v=query(u<<1,l,mid);
	if(r>mid) v=max(v,query(u<<1|1,mid+1,r));
	return v;
}

int main(){
	scanf("%d%lld",&m,&d);
	build(1,1,m);
	LL p=0;
	while(m--){
		char op;
		LL t;
		cin>>op>>t;
		if(op=='A'){
			idx++;
			modify(1,idx,(t+p)%d);
		}
		else{
			p=query(1,idx-t+1,idx);
			printf("%lld\n",p);
		}
	}
	return 0;
}
2023/10/2 16:13
加载中...