社区讨论

线段树全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 条回复,欢迎继续交流。

正在加载回复...