jsoi2008最大数bzoj1012

题意就是维护一个队列,支持查询最近插入的L个数里面的最大值和插入,所以我们可以使用单调栈,单调队列之类的写,线段树平衡树当然可以只不过我们需要在比赛中尽量的节省时间,当然平常我们也可以练习一下,线段树很直观,直接做,平衡树加入一个插入标记,把查询L个数中最早插入的splay树根,最近的splay到右子树然后似乎就可以做了?有时间写一发试下啊咧《这莫非又是坑?
#include<cstdio>
#include<algorithm>
using namespace std;
int a[200005],top,b[200005],ans,inf;
int n,flag;

int main()
{
        scanf("%d%d",&n,&inf);
        for (int i=1;i<=n;i++)
        {
                char op[1];int x;
                scanf("%s %d",op,&x);
                if (op[0]=='A')
                {
                        x+=ans;
                        x%=inf;
                        b[++b[0]]=x;
                        while (top&&b[a[top]]<=x) top--;
                        a[++top]=b[0];
                }
                else
                {
                        int t=lower_bound(a+1,a+top+1,b[0]-x+1)-a;
                        ans=b[a[t]];
                        printf("%d\n",ans);
                }
        }
        return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值