社区讨论
线段树全MLE求救
P1198[JSOI2008] 最大数参与者 3已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @mk7vjn2h
- 此快照首次捕获于
- 2026/01/10 13:38 上个月
- 此快照最后确认于
- 2026/01/12 21:00 上个月
rt
CPP#include<bits/stdc++.h>
using namespace std;
#define int long long
#define mid ((l+r)>>1)
const int N=2e5+5;
int m,d,n,t,len;
char c;
int tree[N*4];
int ls(int x){return x<<1;}
int rs(int x){return x<<1|1;}
void pushup(int x){
tree[x]=max(tree[ls(x)],tree[rs(x)]);
return;
}
void update(int l,int r,int x,int u,int k){
if(l==u&&l==r){
tree[x]=k;
return;
}
if(l<=u&&u<=mid)update(l,mid,ls(x),u,k);
if(mid+1<=u&&u<=r)update(mid+1,r,rs(x),u,k);
pushup(x);
return;
}
int query(int l,int r,int x,int L,int R){
if(L<=l&&r<=R){
return tree[x];
}
int res=-1e9;
if(L<=mid)res=query(l,mid,ls(x),L,R);
if(R>=mid+1)res=max(res,query(mid+1,r,rs(x),L,R));
return res;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>m>>d;
while(m--){
cin>>c>>n;
if(c=='A'){
len++;
update(1,m,1,len,(n+t)%d);
}else{
int ans=query(1,m,1,len-n+1,len);
cout<<ans<<'\n';
t=ans;
}
}
return 0;
}
思路就是普通单点修改+区间最值查询,这题是不是不能用线段树做/ll
回复
共 3 条回复,欢迎继续交流。
正在加载回复...