re求调,感谢大佬
/*
* @Author: Director-Ni nya0624@outlook.com
* @Date: 2024-12-15 13:42:07
* @LastEditors: Director-Ni nya0624@outlook.com
* @LastEditTime: 2024-12-15 14:28:09
* @FilePath: \NOI Exercise\P1198(segement tree)_only pushup.cpp
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int M=22;
int m;
ll d,t;
struct node{
int l,r;
ll w;
}no[M<<2];
/// @brief
/// @param i当前节点
/// @param l 区间左端点
/// @param r 区间右端点
void build(int i,int l1,int r1){
no[i].l=l1;no[i].r=r1;
if(l1==r1) return;
build(i<<1,l1,l1+(r1-l1)>>1);
build(i<<1|1,l1+(1l-r1)>>1+1,r1);
return;
}
void pushup(int i){
no[i].w=max(no[i<<1|1].w,no[i<<1].w);
return ;
}
void addn(int i,int x,long long v){
if(no[i].l==no[i].r&&no[i].l==x){
no[i].w=v;
return;
}
else{
int mid=no[i].l+(no[i].r-no[i].l)>>1;
if(x<=mid){
addn(i<<1,x,v);//递归左儿子
}
if(x>mid){
addn(i<<1|1,x,v);//递归you儿子
}
pushup(i);
}
return;
}
ll que(int i,int l,int r){
if(l<=no[i].l&&r>=no[i].r) return no[i].w;
else{
int mid=no[i].l+(no[i].r-no[i].l)>>1;
ll ret=-10;
if(l<=mid){//查询的区间与当前递归到的区间的左侧有交集
ret=que(i<<1,l,r);
}
if(r>=mid){//查询的区间与当前递归到的区间的右侧有交集
ret=max(ret,que(i<<1|1,l,r));
}
return ret;
}
}
int main(){
cin>>m>>d;
char k;t=0;
long long shuru=0;
build(1,1,m);
int cnt=0;
while(m--){
cin>>k;
cin>>shuru;
if(k=='A'){
addn(1,++cnt,(shuru+t)%d);
}
else{
t=que(1,cnt-shuru+1,cnt);
cout<<t<<endl;
}
}
return 0;
}