复习debug:
query(),build(),modify()
函数的mid
变量忘记右移,tr[u].l
写成tr[u].r
- 忘记详细读题,添加操作实际上与之前的查询操作相关联。
modify
函数要加long long
debug全靠 chatgpt4 QAQ
#include<iostream>
#include<algorithm>
using namespace std;
const int M=2e5+10,P=2e9+10;
int m,p;
struct Node{
int l,r;
int v;
}tr[4*M];
void build(int u,int l,int r){
tr[u]={l,r};
if(l==r)return ;
int mid=l+r>>1;
build(u<<1,l,mid),build(u<<1|1,mid+1,r);
}
void pushup(int u){
tr[u].v=max(tr[u<<1].v,tr[u<<1|1].v);
}
void modify(int u,int v,int x){
if(tr[u].r==tr[u].l)tr[u].v=x;
else{
int mid=tr[u].l+tr[u].r>>1;
if(mid>=v)modify(u<<1,v,x);
else modify(u<<1|1,v,x);
pushup(u);
}
}
int query(int u,int l,int r){
if(tr[u].l>=l&&tr[u].r<=r)return tr[u].v;
else{
int mid=tr[u].l+tr[u].r>>1;
int res=0;
if(mid>=l)res=query(u<<1,l,r);
if(r>mid)res=max(res,query(u<<1|1,l,r));
return res;
}
}
int main(){
cin>>m>>p;
build(1,1,m);
int temp=0;
int n=0;
for(int i=1;i<=m;i++){
char op;
int x;
cin>>op>>x;
if(op=='Q'){
temp=query(1,n-x+1,n);
cout<<temp<<endl;
}
else{
modify(1,++n,(x+temp)%p);
}
}
}