您的位置:首页 > Web前端 > JavaScript

jsoi2008最大数bzoj1012

2015-08-25 11:34 513 查看
题意就是维护一个队列,支持查询最近插入的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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息