社区讨论

全RE求助

P1198[JSOI2008] 最大数参与者 6已保存回复 11

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
11 条
当前快照
1 份
快照标识符
@locp0u0e
此快照首次捕获于
2023/10/30 17:24
2 年前
此快照最后确认于
2023/11/05 04:17
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
int n,t=0,tree[1000010],inf=0x7fffffff,MOD;
char op[5];
inline void pushup(int id)
{
    tree[id]=max(tree[id<<1],tree[id<<1|1]);
    return;
}
inline void build(int id,int l,int r)
{
    if(l==r)
    {
        tree[id]=0;
    }
    int mid=(l+r)>>1;
    build(id<<1,l,mid);
    build(id<<1|1,mid+1,r);
    pushup(id);
}
inline void update(int id,int l,int r,int x,int v)
{
    if(l==r)
    {
        tree[id]=v;
        return;
    }
    int mid=(l+r)>>1;
    if(x<=mid)
    {
        update(id<<1,l,mid,x,v);
    }
    else
    {
        update(id<<1|1,mid+1,r,x,v);
    }
    pushup(id);
}
inline int query(int id,int x,int y,int l,int r)//x,y表示要查的区间,l,r表示目前查的区间
{
    if(l>=x&&r<=y)
    {
        return tree[id];
    }
    int mid=(l+r)>>1;
    int ans=-inf;
    if(x<=mid)
    {
        ans=max(ans,query(id<<1,x,y,l,mid));
    }
    if(y>mid)
    {
        ans=max(ans,query(id<<1|1,x,y,mid+1,r));
    }
    return ans;
}
int main()
{
    scanf("%d %d",&n,&MOD);
    build(1,1,n);
    int tmp;
    while(n--)
    {
        scanf("%s",op);
        if(op[0]=='A')//修改
        {
            scanf("%d",&tmp);
            update(1,1,n,tmp,t);
        }
        else//查询
        {
            int l;
            scanf("%d",&l);
            int iakioi=query(1,n-l+1,n,1,n)%MOD;
            printf("%d",iakioi);
            t=iakioi;
            puts("");
        }
    }
}

回复

11 条回复,欢迎继续交流。

正在加载回复...