比赛 线段数树状数组 评测结果 AAAAAAAAAA
题目名称 最大数 最终得分 100
用户昵称 Xiaokang_Zhao120 运行时间 2.875 s
代码语言 C++ 内存使用 7.94 MiB
提交时间 2018-06-24 15:29:04
显示代码纯文本
#include<iostream>
#include<cstdio>
using namespace std;

typedef long long int_;
#define lson l , m , rt << 1
#define rson m+1 , r , rt << 1 | 1

const int_ maxn = 200000+1;
int_ data[maxn],max_[maxn<<2];

void push_up(int_ rt)
{
    max_[rt]=max(max_[rt<<1] , max_[rt<<1|1]);
    return;
}
void build(int_ l,int_ r,int_ rt)
{
    if(l==r)
    {
        max_[rt]=data[l];
        return;
    }
    int_ m=(l+r) >> 1;
    build(lson);
    build(rson);
    push_up(rt);
    return;
}
void update(int_ p,int_ sc,int_ l,int_ r,int_ rt)
{
    if(l==r)
    {
        max_[rt]=sc;
        return;
    }
    int_ m=(l+r)>>1;
    if(p<=m)
        update(p,sc,lson);
    else
        update(p,sc,rson);
    push_up(rt);
    return;
}
int_ query(int_ L,int_ R,int_ l,int_ r,int_ rt)
{
    if(L<=l&&r<=R)
        return max_[rt];
    int_ m=(l+r)>>1;
    int_ ret=0;
    if(L<=m)
        ret=max(ret,query(L,R,lson));
    if(R>m)
        ret=max(ret,query(L,R,rson));
    return ret;
}

int main()
{
    freopen("bzoj_1012.in","r",stdin);freopen("bzoj_1012.out","w",stdout);
    int_ m,d,t=0,p=0;
    cin>>m>>d;
    for(int i=1;i<=m;i++)
    {
        char c;int_ n;
        cin>>c>>n;
        if(c=='A')
            update(++p,(n+t)%d,1,m,1);
        else
        {
            int_ ans=query(p-n+1,p,1,m,1);
            t=ans;
            cout<<ans<<endl;
        }
    }
    return 0;
}