@[smile_jyc](/user/1246532) 你这个线段树写的不伦不类。
1. `update1()` 好像没用
2. `update(2*u,L,mid,l,r,x);
update(2*u+1,mid+1,R,l,r,x);` 这个要条件限制的,不然会RE/MLE吧?
3. query也是
by da_ke @ 2024-04-21 20:38:58
```cpp
#include <bits/stdc++.h>
#define rep(i,l,r) for(int i=(l);i<=(r);++i)
using namespace std;
typedef long long ll;
const int N=2e5+23;
int len=0,Q,D;
int mx[4*N];
inline void update(int s,int v,int l,int r,int p)
{
int lc=p<<1,rc=p<<1|1,mid=l+((r-l)>>1);
if(l==r){mx[p]=v;return ;}
if(s<=mid)
update(s,v,l,mid,lc);
if(s>mid)
update(s,v,mid+1,r,rc);
mx[p]=max(mx[lc],mx[rc]);
}
inline int query(int s,int t,int l,int r,int p)
{
int lc=p<<1,rc=p<<1|1,mid=l+((r-l)>>1);
if(s<=l&&r<=t)
return mx[p];
int ans=-1<<30;
if(s<=mid) ans=max(ans,query(s,t,l,mid,lc));
if(t>mid) ans=max(ans,query(s,t,mid+1,r,rc));
return ans;
}
int main()
{
int t=0;
cin>>Q>>D;
rep(i,1,Q)
{
char opt;
ll n;
cin>>opt>>n;
if(opt=='A'){len++;update(len,(n+t)%D,1,Q,1);}
if(opt=='Q'){t=query(len-n+1,len,1,Q,1)%D;cout<<t<<endl;}
}
}
```
送你魔板
```
by da_ke @ 2024-04-21 20:40:50
主播你的 lazy tag 下放到节点时更新错了 w,而且 update1 没有下放 lazy tag,而且 query 钟不在区间内的应该返回极大值(因为查询最小值)
by yukimianyan @ 2024-04-21 20:50:21
@[yukimianyan](/user/509229) ta 的 update1 好像没用,所以不用管他
by da_ke @ 2024-04-21 20:51:19
就想象一下给整个数列 +1,最小值怎么变化,不是 `w[u]+=(R-L+1)*x;`
by yukimianyan @ 2024-04-21 20:51:46
```cpp
void maketag(int u,int L,int R,long long x){
lzy[u]+=x;
w[u]+=x;
}
```
by da_ke @ 2024-04-21 20:52:47
这另一位主播是对的
by yukimianyan @ 2024-04-21 20:53:49
哪个题?
by Zhouzimu_by53 @ 2024-04-21 21:12:24