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

Sample Output

96
93
96
题解:裸线段树,区间查询,单点修改。
代码:
#include<cstdio>
#include<algorithm>
using namespace std;
template<class T>inline void read(T &x)
{x=0;int f=0;char ch=getchar();while(ch<'0'||ch>'9')f|=(ch=='-'),ch=getchar();while(ch<='9'&&ch>='0')x=(x<<1)+(x<<3)+(ch^48),ch=getchar();x=f?-x:x;return;
}
int tr[1000000],n,D,tot,t;
void add(int i,int l,int r,int x,int y)
{if(l==r){tr[i]+=y;tr[i]%=D;return;}int mid=l+r>>1;if(x<=mid)add(i<<1,l,mid,x,y);else add(i<<1|1,mid+1,r,x,y);tr[i]=max(tr[i<<1],tr[i<<1|1]);
}
int query(int i,int l,int r,int x,int y)
{if(x<=l&&r<=y)return tr[i];int mid=l+r>>1;if(y<=mid)return query(i<<1,l,mid,x,y);else if(x>mid)return query(i<<1|1,mid+1,r,x,y);else return max(query(i<<1,l,mid,x,mid),query(i<<1|1,mid+1,r,mid+1,y));
}
int main()
{int x;char s;read(n);read(D);for(int i=1;i<=n;i++){scanf("%c",&s);read(x);if(s=='A'){x=(x+t)%D;add(1,1,200000,++tot,x);}else{x=tot-x+1;x=query(1,1,200000,x,tot);t=x;printf("%d\n",x);}}return 0;
}

转载于:https://www.cnblogs.com/jiangtao0508/p/7738416.html

[JSOI2008]最大数maxnumber(线段树)相关推荐

  1. BZOJ-1012[JSOI2008]最大数maxnumber 线段树区间最值

    这道题相对简单下面是题目: 1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MB Submit: 6542 Solve ...

  2. BZOJ 1012: [JSOI2008]最大数maxnumber(线段树)

    裸的线段树...因为数组开小了而一直RE..浪费了好多时间.. -------------------------------------------------------------------- ...

  3. 1012: [JSOI2008]最大数maxnumber 线段树

    https://www.lydsy.com/JudgeOnline/problem.php?id=1012 现在请求你维护一个数列,要求提供以下两种操作:1. 查询操作.语法:Q L 功能:查询当前数 ...

  4. BZOJ1012|JSOI最大数maxnumber|线段树

    Description 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作.语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值.限制:L不超过当前数列的长度. 2. ...

  5. BZOJ 1012: [JSOI2008]最大数maxnumber 单调队列/线段树/树状数组/乱搞

    1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MB Submit: 4750  Solved: 2145 [Sub ...

  6. BZOJ 1012 [JSOI2008]最大数maxnumber

    1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MB Submit: 5425  Solved: 2397 [Sub ...

  7. 【BZOJ 1012】[JSOI2008]最大数maxnumber

    1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MB Description 现在请求你维护一个数列,要求提供以下两种 ...

  8. 1012: [JSOI2008]最大数maxnumber

    1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MB Submit: 10711  Solved: 4683 [Su ...

  9. BZOJ 1012: [JSOI2008]最大数maxnumber

    1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MB Submit: 11358  Solved: 4978 [Su ...

  10. 【听说是线段树】bzoj1012 [JSOI2008]最大数maxnumber

    一眼看题目吓了一跳:这TM不就是单调队列吗,200000又怎样,大不了我二分嘛 系统提示:成功开启 手残模式 开始瞎写: 1 #include <cstdio> 2 long long a ...

最新文章

  1. EF架构~在global.asax里写了一个异常跳转,不错!
  2. 【多线程】ThreadPoolExecutor 类的使用详解
  3. php 回复id同过session 任意获取id不通过a,PHP会话ID相同但变量丢失
  4. cocos2d-x初探学习笔记(16)--LayerColor
  5. EntiyFramework :Update model from database引起的两个问题
  6. php 开启,PHP服务的开启详细步骤
  7. python可以在多种平台运行、这体现了python语言的,Python可以在多种平台运行,这体现了Python语言的可移植特性...
  8. Python 利用字典实现类似 java switch case 功能
  9. rails 表单嵌套
  10. shell脚本 空格
  11. 44. Wildcard Matching (String; DP, Back-Track)
  12. flask:小项目(医生与病人)
  13. Android机顶盒adb调试及一直显示offline的处理
  14. 链路追踪译文学习记录(Dapper!!!非原创!!!学习记录)
  15. Android 时间格式化
  16. jy-12-SPRINGMYBATIS02——云笔记02-刘苍松
  17. 编程修养 - 来自网络整理
  18. Linux 系统安全检查
  19. 如何解决打开浏览器跳转MSN中国页面
  20. 炼丹心得|追求极致的比赛冠军什么样?

热门文章

  1. MySQL之Got fatal error 1236 from master when reading data from binary log
  2. python contains类似函数_介绍几款Python性能优化工具
  3. linux终端下载vscode,Ubuntu:安装vscode
  4. POJ 3461题解(kmp算法)文本串和子串匹配
  5. 计算机房采用c02采灭火,[灭火器使用.doc
  6. C/C++[codeup 1944]八进制
  7. 数据集:mnist手写数据集
  8. DeepLab图像分割
  9. 423.从英文中重建数字
  10. 304.二维区域和检索-矩阵不可变