社区讨论
线段树全mle求教
P1198[JSOI2008] 最大数参与者 3已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @m0qkvbfb
- 此快照首次捕获于
- 2024/09/06 18:33 2 年前
- 此快照最后确认于
- 2025/11/04 21:40 4 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+10;
const int mod=1e9+7;
struct ty
{
int minv;
}tree[4*N];
void update(int id)
{
tree[id].minv=max(tree[id*2].minv,tree[id*2+1].minv);
}
int query(int id,int l,int r,int ql,int qr)
{
if(l==ql&&r==qr) return tree[id].minv;
int mid=(l+r)>>1;
if(qr<=mid) return query(id*2,l,mid,ql,qr);
else if(ql>mid) return query(id*2+1,mid+1,r,ql,qr);
else return max(query(id*2,l,mid,ql,mid),query(id*2+1,mid+1,r,mid+1,qr));
}
int change(int id,int l,int r,int pos,int val)
{
if(l==r) tree[id].minv=val;
else
{
int mid=l+r>>1;
if(pos<=mid) change(id*2,l,mid,pos,val);
else change(id*2+1,mid+1,r,pos,val);
update(id);
}
}
void solve()
{
int n,m;
cin>>n>>m;
//build(1,1,n);
int last=0;
int idx=0;
for(int i=1;i<=n;i++)
{
char op;
cin>>op;
if(op=='A')
{
int x;
cin>>x;
change(1,1,n,idx+1,(x+last)%m);
idx++;
}
else
{
int x;
cin>>x;
last=query(1,1,n,idx-x+1,idx);
cout<<last<<endl;
}
}
}
signed main()
{
int t=1;
//cin>>t;
while(t--)
{
solve();
}
}
初学线段树,所有点均mle,问题未知,求指点
回复
共 5 条回复,欢迎继续交流。
正在加载回复...