Luogu P1198 [JSOI2008]最大数 线段树
P1198 [JSOI2008]最大数
题目描述
现在请求你维护一个数列,要求提供以下两种操作:
1、 查询操作。
语法:Q L
功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值。
限制:L不超过当前数列的长度。
2、 插入操作。
语法:A n
功能:将n加上t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将所得结果对一个固定的常数D取模,将所得答案插入到数列的末尾。
限制:n是整数(可能为负数)并且在长整范围内。
注意:初始时数列是空的,没有一个数。
输入输出格式
输入格式:
第一行两个整数,M和D,其中M表示操作的个数(M <= 200,000),D如上文中所述,满足(0<D<2,000,000,000)
接下来的M行,每行一个字符串,描述一个具体的操作。语法如上文所述。
输出格式:
对于每一个查询操作,你应该按照顺序依次输出结果,每个结果占一行。
输入输出样例
5 100 A 96 Q 1 A 97 Q 1 Q 2
96 93 96
说明
[JSOI2008]
思路
线段树小试牛刀!qwq
先建一颗空的线段树,然后每次把值插入,用num统计个数
然后每次查询num-n+1到num这个区间的最大值输出就是啦
代码
1 program maxnumber; 2 const 3 inf='maxnumber.in'; 4 outf='maxnumber.out'; 5 type 6 tree=^node; 7 node=record 8 lc,rc:tree; 9 l,r,val:longint; 10 end; 11 12 var 13 i,m,n,d,ctot,num,l:longint; 14 ch:char; 15 t:tree; 16 s,e,a:array[1..200000] of longint; 17 18 function max(aa,bb:longint):longint; 19 begin 20 if aa>bb then exit(aa) 21 else exit(bb); 22 end; 23 24 function min(aa,bb:longint):longint; 25 begin 26 if aa>bb then exit(bb) 27 else exit(aa); 28 end; 29 30 procedure add(apple:longint); 31 begin 32 inc(num); 33 a[num]:=apple mod d; 34 end; 35 36 procedure add(var t:tree; seat:longint; data:longint); 37 begin 38 if t^.l=t^.r then begin 39 t^.val:=max(t^.val,data); 40 exit; 41 end; 42 if seat<=t^.lc^.r then add(t^.lc,seat,data) 43 else add(t^.rc,seat,data); 44 t^.val:=max(t^.val,data); 45 end; 46 47 procedure build(var t:tree; l,r:longint); 48 var 49 mid:longint; 50 begin 51 new(t); 52 t^.l:=l; t^.r:=r; 53 if l=r then begin 54 t^.val:=a[l]; 55 exit; 56 end; 57 mid:=(l+r) div 2; 58 build(t^.lc,l,mid); 59 build(t^.rc,mid+1,r); 60 t^.val:=max(t^.lc^.val,t^.rc^.val); 61 end; 62 63 function query(var t:tree; l,r:longint):longint; 64 var 65 mm:longint; 66 begin 67 if (t^.l=t^.r) or ((t^.l>=l) and (t^.r<=r)) then exit(t^.val); 68 mm:=-maxlongint; 69 if l<=t^.lc^.r then mm:=query(t^.lc,l,min(t^.lc^.r,r)); 70 if r>=t^.rc^.l then mm:=max(mm,query(t^.rc,max(t^.rc^.l,l),r)); 71 exit(mm); 72 end; 73 74 begin 75 // assign(input,inf); assign(output,outf); 76 reset(input); rewrite(output); 77 78 readln(m,d); 79 build(t,1,m); 80 l:=0; 81 for i:= 1 to m do 82 begin 83 readln(ch,n); 84 if ch='A' then begin num:=num+1; add(t,num,(n+l) mod d); end 85 else begin 86 l:=query(t,num-n+1,num); 87 writeln(l); 88 end; 89 end; 90 91 close(input); 92 close(output); 93 end.
转载于:https://www.cnblogs.com/bobble/p/6596186.html
Luogu P1198 [JSOI2008]最大数 线段树相关推荐
- [JSOI2008]最大数 线段树解法
题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:L不超过当前数列的长度. 2. 插入操作 ...
- Luogu P1198 BZOJ 1012 最大数 (线段树)
Luogu P1198 BZOJ 1012 最大数 (线段树) 手动博客搬家: 本文发表于20170821 14:32:05, 原地址https://blog.csdn.net/suncongbo/a ...
- 洛谷P1198 [JSOI2008]最大数
P1198 [JSOI2008]最大数 267通过 1.2K提交 题目提供者该用户不存在 标签线段树各省省选 难度提高+/省选- 提交该题 讨论 题解 记录 最新讨论 WA80的戳这QwQ BZOJ都 ...
- 洛谷 - P1198 - 最大数 - 线段树
https://www.luogu.org/problemnew/show/P1198 要问区间最大值,肯定是要用线段树的,不能用树状数组.(因为没有逆元?但是题目求的是最后一段,可以改成类似前缀和啊 ...
- 【JSOI2008】最大数 线段树
题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1.查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:L不超过当前数列的长度. 2.插入操作. ...
- P1198 [JSOI2008]最大数
题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:L不超过当前数列的长度.(L>0) ...
- [ Luogu 3924 ] 康纳的线段树
\(\\\) \(Description\) 现在有一个线段树维护长为\(N\)的数列,实现方式是\(mid=((l+r)>>1)\),支持区间加,节点维护区间和. 共有\(M\)次区间加 ...
- LUOGU P4088 [USACO18FEB]Slingshot(线段树)
传送门 解题思路 推了推式子发现是个二维数点,想了想似乎排序加线段树难写,就写了个树套树,结果写完看见空间才\(128M\)..各种奇技淫巧卡空间还是\(MLE\)到天上.后来只好乖乖的写排序+线段树 ...
- 【BZOJ】1012: [JSOI2008]最大数maxnumber 树状数组求区间最值
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1012 题意:维护一个数列,开始时没有数值,之后会有两种操作, Q L :查询数列末 ...
最新文章
- servlet解析演进(2-1)
- 12_信息熵,信息熵公式,信息增益,决策树、常见决策树使用的算法、决策树的流程、决策树API、决策树案例、随机森林、随机森林的构建过程、随机森林API、随机森林的优缺点、随机森林案例
- SAP Data Intelligence Modeler的一些使用截图
- t分布 u分布 卡方分布_中心极限定理|z分布|t分布|卡方分布
- 初中数学503个必考知识点_2020年中考数学必考知识点公布,考生高分、满分提分必备神器...
- 【Kafka】Exiting due to: org/apache/kafka/common/protocol/SecurityProtocol
- 字体海报设计灵感|这海报的字体够别致,脑洞够大!
- 计算机网络监控,计算机网络连接监控系统.doc
- 01-C语言之父:丹尼斯·里奇
- 安卓HTML5屏蔽弹窗代码,手机弹窗太烦人,5招教你屏蔽各种弹窗通知!
- BT656视频传输标准
- python数据分析实训报告总结_Python实训周总结(精品文档)
- 【电力电子技术】SEPIC 电路 与 ZETA 电路
- 如何提高接收机的灵敏度
- 矩阵的rank,nullspace以及eigenvalue的理解
- Linux下文件名乱码的解决方法
- 去金坛长荡湖吃船菜,原来1947年就有前辈在努力发展中国的计算机产业
- 连续四年ROE在20%附近的绩优股
- .NET Book Zero 读书笔记(三)(从C++的使用者角度学习C#)
- Linux - 第18节 - 网络基础(传输层一)