bzoj 1012: [JSOI2008]最大数maxnumber(线段树)
来源:互联网 发布:银联数据是不是国企 编辑:程序博客网 时间:2024/05/16 05:20
Description
现在请求你维护一个数列,要求提供以下两种操作:1、 查询操作。语法:Q L 功能:查询当前数列中末尾L
个数中的最大的数,并输出这个数的值。限制:L不超过当前数列的长度。2、 插入操作。语法:A n 功能:将n加
上t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将所得结果对一个固定的常数D取
模,将所得答案插入到数列的末尾。限制:n是非负整数并且在长整范围内。注意:初始时数列是空的,没有一个
数。
Input
第一行两个整数,M和D,其中M表示操作的个数(M <= 200,000),D如上文中所述,满足D在longint内。接下来
M行,查询操作或者插入操作。
Output
对于每一个询问操作,输出一行。该行只有一个数,即序列中最后L个数的最大数。
Sample Input
5 100
A 96
Q 1
A 97
Q 1
Q 2
A 96
Q 1
A 97
Q 1
Q 2
Sample Output
96
93
93
96
solution:
线段树暴搞即可。
#include<cstdio>#include<algorithm>using namespace std;typedef long long ll;#define ls (t<<1)#define rs (t<<1)|1const int maxn = 200200;int fa[maxn];int n;long long d;struct node{ int l, r; ll val;}e[maxn*4];void build(int l,int r,int t){ e[t].l = l; e[t].r = r; e[t].val = 0; if (l == r) { fa[l] = t; return; } build(l,(l + r) / 2, ls); build((l + r) / 2 + 1, r, rs);}void update(int t){ if (t == 1)return; t >>= 1; e[t].val = max(e[ls].val, e[rs].val); update(t);}ll query(int l, int r, int t){ if (e[t].l >= l&&e[t].r <= r) { return e[t].val; } long long ans = 0; int mid = (e[t].l + e[t].r) / 2; if (l <= mid)ans = max(ans, query(l,r,ls)); if (r > mid)ans = max(ans, query(l,r,rs)); return ans; }int main(){ char op[10]; while (~scanf("%d%lld", &n, &d)) { ll tmp = 0,x; int s = 0; build(1, n, 1); while (n--) { scanf("%s%lld", op, &x); if (op[0] == 'A') { x += tmp; s++; x %= d; e[fa[s]].val = x; update(fa[s]); } else { tmp = query(s - x+1, s, 1); printf("%lld\n", tmp); } } } return 0;}
0 0
- BZOJ 题目1012: [JSOI2008]最大数maxnumber(线段树)
- bzoj 1012: [JSOI2008]最大数maxnumber(线段树)
- BZOJ 1012[JSOI2008]最大数maxnumber (线段树解法)
- |BZOJ 1012|线段树|[JSOI2008]最大数maxnumber
- 【BZOJ 1012】 [JSOI2008]最大数maxnumber(线段树做法)
- BZOJ 1012: [JSOI2008]最大数maxnumber 单调队列/线段树
- BZOJ 1012: [JSOI2008]最大数maxnumber 线段树入门题
- [BZOJ 1012][JSOI2008]最大数maxnumber:线段树|单调栈
- BZOJ 1012 [JSOI2008] 最大数maxnumber 题解与分析 (ZKW线段树实现)
- BZOJ 1012[jsoi2008] 最大数maxnumber 线段树(或者是单调队列+二分)
- 【bzoj 1012】[JSOI2008]最大数maxnumber(线段树||st表)
- 【bzoj 1012】[JSOI2008]最大数maxnumber 线段树裸题
- BZOJ 1012 JSOI2008 最大数maxnumber 单调栈+二分 / 线段树
- BZOJ-1012[JSOI2008]最大数maxnumber 线段树区间最值
- BZOJ 1012 [JSOI2008]最大数maxnumber=听说是线段树
- BZOJ 1012: [JSOI2008]最大数maxnumber
- BZOJ 1012 [JSOI2008]最大数maxnumber
- BZOJ 1012: [JSOI2008]最大数maxnumber
- iOS开发之微信自动抢红包功能
- 2015-2016前端知识体系
- JDK6和JDK7中的substring()
- 二次排序说明
- 基本Web概念
- bzoj 1012: [JSOI2008]最大数maxnumber(线段树)
- 1014 A strange lift
- 第九周项目 2.1 我的数组类
- Spring 工作流程简单介绍
- Mybatis配置文件resultMap映射啥时候可写可不写?
- jQuery选择器
- mvc、mvvm、mvp模式区分
- jQuery 获取多选框的值
- nodejs基于express4+mysql+express-controller的mvc框架