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行,每行一个字符串,描述一个具体的操作。语法如上文所述。

输出格式:

对于每一个查询操作,你应该按照顺序依次输出结果,每个结果占一行。

输入输出样例

输入样例#1:

5 100
A 96
Q 1
A 97
Q 1
Q 2

输出样例#1:

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]最大数 线段树相关推荐

  1. [JSOI2008]最大数 线段树解法

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

  2. Luogu P1198 BZOJ 1012 最大数 (线段树)

    Luogu P1198 BZOJ 1012 最大数 (线段树) 手动博客搬家: 本文发表于20170821 14:32:05, 原地址https://blog.csdn.net/suncongbo/a ...

  3. 洛谷P1198 [JSOI2008]最大数

    P1198 [JSOI2008]最大数 267通过 1.2K提交 题目提供者该用户不存在 标签线段树各省省选 难度提高+/省选- 提交该题 讨论 题解 记录 最新讨论 WA80的戳这QwQ BZOJ都 ...

  4. 洛谷 - P1198 - 最大数 - 线段树

    https://www.luogu.org/problemnew/show/P1198 要问区间最大值,肯定是要用线段树的,不能用树状数组.(因为没有逆元?但是题目求的是最后一段,可以改成类似前缀和啊 ...

  5. 【JSOI2008】最大数 线段树

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

  6. P1198 [JSOI2008]最大数

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

  7. [ Luogu 3924 ] 康纳的线段树

    \(\\\) \(Description\) 现在有一个线段树维护长为\(N\)的数列,实现方式是\(mid=((l+r)>>1)\),支持区间加,节点维护区间和. 共有\(M\)次区间加 ...

  8. LUOGU P4088 [USACO18FEB]Slingshot(线段树)

    传送门 解题思路 推了推式子发现是个二维数点,想了想似乎排序加线段树难写,就写了个树套树,结果写完看见空间才\(128M\)..各种奇技淫巧卡空间还是\(MLE\)到天上.后来只好乖乖的写排序+线段树 ...

  9. 【BZOJ】1012: [JSOI2008]最大数maxnumber 树状数组求区间最值

    题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1012 题意:维护一个数列,开始时没有数值,之后会有两种操作, Q L :查询数列末 ...

最新文章

  1. servlet解析演进(2-1)
  2. 12_信息熵,信息熵公式,信息增益,决策树、常见决策树使用的算法、决策树的流程、决策树API、决策树案例、随机森林、随机森林的构建过程、随机森林API、随机森林的优缺点、随机森林案例
  3. SAP Data Intelligence Modeler的一些使用截图
  4. t分布 u分布 卡方分布_中心极限定理|z分布|t分布|卡方分布
  5. 初中数学503个必考知识点_2020年中考数学必考知识点公布,考生高分、满分提分必备神器...
  6. 【Kafka】Exiting due to: org/apache/kafka/common/protocol/SecurityProtocol
  7. 字体海报设计灵感|这海报的字体够别致,脑洞够大!
  8. 计算机网络监控,计算机网络连接监控系统.doc
  9. 01-C语言之父:丹尼斯·里奇
  10. 安卓HTML5屏蔽弹窗代码,手机弹窗太烦人,5招教你屏蔽各种弹窗通知!
  11. BT656视频传输标准
  12. python数据分析实训报告总结_Python实训周总结(精品文档)
  13. 【电力电子技术】SEPIC 电路 与 ZETA 电路
  14. 如何提高接收机的灵敏度
  15. 矩阵的rank,nullspace以及eigenvalue的理解
  16. Linux下文件名乱码的解决方法
  17. 去金坛长荡湖吃船菜,原来1947年就有前辈在努力发展中国的计算机产业
  18. 连续四年ROE在20%附近的绩优股
  19. .NET Book Zero 读书笔记(三)(从C++的使用者角度学习C#)
  20. Linux - 第18节 - 网络基础(传输层一)

热门文章

  1. 使用指针数组实现这两个矩阵的相乘
  2. Uboot中start.S源码的指令级的详尽解析 在线版
  3. Ubuntu 18.04 搭建 gitlab服务器记录
  4. s5-15 开放的最短路径优先_OSPF
  5. mac word维吾尔文字体_字加软件更新啦!万款字体一键激活!
  6. git status中文显示乱码
  7. 1715: 序列变换(LIS变形)
  8. 并查集(浓缩的精华模版!!!!)
  9. 基于实时计算Flink版的场景解决方案demo
  10. 外部工具连接SaaS模式云数据仓库MaxCompute实战:商业BI分析工具篇