Cogs 1844. [JSOI2008]最大数maxnumber
2016-08-02 08:20
337 查看
[JSOI2008]最大数maxnumber
★★ 输入文件:bzoj_1012.in 输出文件:bzoj_1012.out 简单对比
时间限制:3 s 内存限制:162 MB
【题目描述】
现在请求你维护一个数列,要求提供以下两种操作: 1、 查询操作。语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值。限制:L不超过当前数列的长度。 2、 插入操作。语法:A n 功能:将n加上t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将所得结果对一个固定的常数D取模,将所得答案插入到数列的末尾。限制:n是非负整数并且在长整范围内。注意:初始时数列是空的,没有一个数。
【输入格式】
第一行两个整数,M和D,其中M表示操作的个数(M <= 200,000),D如上文中所述,满足1≤int64max
【输出格式】
对于每一个查询操作,你应该按照顺序依次输出结果,每个结果占一行。
【样例输入】
5 100
A 96
Q 1
A 97
Q 1
Q 2
【样例输出】
96
93
96
【题目来源】
耒阳大视野(衡阳八中) OJ 1012
★★ 输入文件:bzoj_1012.in 输出文件:bzoj_1012.out 简单对比
时间限制:3 s 内存限制:162 MB
【题目描述】
现在请求你维护一个数列,要求提供以下两种操作: 1、 查询操作。语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值。限制:L不超过当前数列的长度。 2、 插入操作。语法:A n 功能:将n加上t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将所得结果对一个固定的常数D取模,将所得答案插入到数列的末尾。限制:n是非负整数并且在长整范围内。注意:初始时数列是空的,没有一个数。
【输入格式】
第一行两个整数,M和D,其中M表示操作的个数(M <= 200,000),D如上文中所述,满足1≤int64max
【输出格式】
对于每一个查询操作,你应该按照顺序依次输出结果,每个结果占一行。
【样例输入】
5 100
A 96
Q 1
A 97
Q 1
Q 2
【样例输出】
96
93
96
【题目来源】
耒阳大视野(衡阳八中) OJ 1012
/* 区间修改+求区间max. */ #include<iostream> #include<cmath> #include<cstdio> #define LL long long #define MAXN 200001 using namespace std; LL n,m,cut,mod; struct data{ LL l,r,lc,rc,sum,bj; }tree[MAXN*4]; LL read(){ LL x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9')x=x*10+ch-48,ch=getchar(); return x*f; } void build(LL l,LL r){ LL k=++cut; tree[k].l=l,tree[k].r=r; if(l==r){ tree[k].sum=0; return ; } LL mid=(l+r)>>1; tree[k].lc=cut+1; build(l,mid); tree[k].rc=cut+1; build(mid+1,r); } void change(LL k,LL p,LL add){ if(tree[k].l==tree[k].r&&tree[k].l==p){ tree[k].sum=add; return ; } LL mid=(tree[k].l+tree[k].r)>>1; if(p<=mid) change(tree[k].lc,p,add); else if(p>mid) change(tree[k].rc,p,add); tree[k].sum=max(tree[tree[k].lc].sum,tree[tree[k].rc].sum); } LL query(LL k,LL l,LL r){ if(l<=tree[k].l&&tree[k].r<=r) return tree[k].sum; LL tot=-0x7fffffff; LL mid=(tree[k].l+tree[k].r)>>1; if(r<=mid) tot=max(query(tree[k].lc,l,r),tot); else if(l>mid) tot=max(query(tree[k].rc,l,r),tot); else tot=max(max(query(tree[k].lc,l,mid),query(tree[k].rc,mid+1,r)),tot); return tot; } int main(){ freopen("bzoj_1012.in","r",stdin); freopen("bzoj_1012.out","w",stdout); LL x,y,z,p=0; char ch; m=read();mod=read();build(1,m); for(int i=1;i<=m;i++){ cin>>ch;x=read(); if(ch=='A') change(1,++n,(x+p+mod)%mod); else { p=query(1,n-x+1,n); cout<<p;printf("\n"); } } return 0; }
相关文章推荐
- 【听说是线段树】bzoj1012 [JSOI2008]最大数maxnumber
- BZOJ 1012: [JSOI2008]最大数maxnumber
- BZOJ 1012: [JSOI2008]最大数maxnumber 线段树
- 1012: [JSOI2008]最大数maxnumber
- BZOJ 1012[jsoi2008] 最大数maxnumber 线段树(或者是单调队列+二分)
- BZOJ 1012: [JSOI2008]最大数maxnumber 单调队列/线段树
- BZOJ 1012: [JSOI2008]最大数maxnumber 单调队列/线段树/树状数组/乱搞
- [bzoj1012][JSOI2008]最大数maxnumber【树状数组】
- 【bzoj1012】[JSOI2008]最大数maxnumber
- BZOJ_1012_[JSOI2008]最大数maxnumber_暴力?(线段树)
- BZOJ-1012[JSOI2008]最大数maxnumber 线段树区间最值
- [JSOI2008]最大数maxnumber 线段树
- 1012: [JSOI2008]最大数maxnumber
- [BZOJ 1012] JSOI 2008 最大数maxnumber · 线段树
- 【BZOJ 1012】【JSOI 2008】最大数maxnumber
- BZOJ 1012([JSOI2008]最大数maxnumber-单调队列)
- BZOJ-1012[JSOI2008]最大数maxnumber 线段树区间最值
- bzoj 1012: [JSOI2008]最大数maxnumber 二分
- BZOJ 1012: [JSOI2008]最大数maxnumber
- 1012: [JSOI2008]最大数maxnumber