全RE求助
查看原帖
全RE求助
730178
pfrig729楼主2024/1/24 19:51
#include<bits/stdc++.h>
using namespace std;
int m,p,n,last;
struct _
{
    int l,r,v;
}tr[800005];
void build(int u,int l,int r)
{
    tr[u].l=l,tr[u].r=r;
    if(l==r)return;
    int mid=(l+r)>>1;
    build(u<<1,l,mid);
    build(u<<1|1,mid+1,r);
}
void pushup(int u)
{
    tr[u].v=max(tr[u<<1].v,tr[u<<1|1].v);
}
int query(int u,int l,int r)
{
    if(l<=tr[u].l&&r>=tr[u].r)return tr[u].v;
    int mid=(tr[u].l+tr[u].r)>>1,res=0;
    if(l<=mid)res=query(u<<1,l,r);
    if(r>=mid)res=max(res,query(u<<1|1,l,r));
    return res;
}
void modify(int u,int x,int v)
{
    if(tr[u].l==x&&tr[u].r==x)tr[u].v=v;
    else
    {
        int mid=(tr[u].l+tr[u].r)>>1;
        if(x<=mid)modify(u<<1,x,v);
        else modify(u<<1|1,x,v);
        pushup(u);
    }
}
int main()
{
    scanf("%d%d",&m,&p);
    build(1,1,m);
    while(m--)
    {
        char c;
        int d;
        scanf("%c %d",&c,&d);
        if(c=='Q')
        {
            last=query(1,n-d+1,n);
            printf("%d\n",last);
        }
        else
        {
            modify(1,n+1,(long long)(last+d)%p);
            ++n;
        }
    }
    return 0;
}
2024/1/24 19:51
加载中...