题目地址:

https://www.luogu.com.cn/problem/P1198

题目描述:
现在请求你维护一个数列,要求提供以下两种操作:
1、查询操作。
语法:Q L
功能:查询当前数列中末尾LLL个数中的最大的数,并输出这个数的值。
限制:LLL不超过当前数列的长度。(L>0)(L > 0)(L>0)
2、 插入操作。
语法:A n
功能:将nnn加上ttt,其中ttt是最近一次查询操作的答案(如果还未执行过查询操作,则t=0t=0t=0),并将所得结果对一个固定的常数DDD取模,将所得答案插入到数列的末尾。
限制:nnn是整数(可能为负数)并且在长整范围内。
注意:初始时数列是空的,没有一个数。

输入格式:
第一行两个整数,MMM和DDD,其中MMM表示操作的个数,DDD如上文中所述。接下来的MMM行,每行一个字符串,描述一个具体的操作。语法如上文所述。

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

数据范围:
对于全部的测试点,保证1≤M≤2×1051 \leq M \leq 2 \times 10^51≤M≤2×105,1≤D≤2×1091 \leq D \leq 2 \times 10^91≤D≤2×109。

可以用ST表。设当前数列为a1,a2,...,ana_1,a_2,...,a_na1​,a2​,...,an​,设f[k][c]=max⁡k−2c+1≤i≤kaif[k][c]=\max_{k-2^c+1\le i\le k} a_if[k][c]=maxk−2c+1≤i≤k​ai​,那么查询最后lll个数的最大值可以通过fff以O(1)O(1)O(1)时间得到,即为:max⁡{f[n][c],f[n−l+2c][c]},c=⌊log⁡2l⌋\max\{f[n][c],f[n-l+2^c][c]\},c=\lfloor\log_2l\rfloormax{f[n][c],f[n−l+2c][c]},c=⌊log2​l⌋在末尾添加一个数xxx的时候,f[.≤n]f[.\le n]f[.≤n]不需要变,只需要计算一下f[n+1]f[n+1]f[n+1]就行了,这可以用查询操作来实现,因为f[n+1][c]f[n+1][c]f[n+1][c]就是max⁡{x,max⁡n−2c+1<i≤nai}\max\{x,\max_{n-2^c+1< i\le n} a_i\}max{x,maxn−2c+1<i≤n​ai​},而括号中的后者可以用查询操作来实现。代码如下:

#include <iostream>
#include <cmath>
using namespace std;const int N = 2e5 + 10;
int n, idx;
long f[N][20], D;long query(int c) {int k = log2(c);return max(f[idx][k], f[idx - c + (1 << k)][k]);
}void add(long x) {f[idx + 1][0] = x;for (int k = 1; 1 << k <= idx + 1; k++)f[idx + 1][k] = max(x, query((1 << k) - 1));idx++;
}int main() {scanf("%d%ld", &n, &D);long t = 0, c;char op;while (n--) {cin >> op >> c;if (op == 'A') add((t + c) % D);else printf("%ld\n", t = query(c));}
}

添加操作时间复杂度O(log⁡n)O(\log n)O(logn),nnn为添加的时候数列长度,查询时间O(1)O(1)O(1),空间O(nlog⁡n)O(n\log n)O(nlogn)。

【洛谷】P1198 最大数相关推荐

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

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

  2. 洛谷 [P1198] 最大数

    首先这是一道线段树裸题,但是线段树长度不确定,那么我们可以在建树的时候,将每一个节点初始化为-INF,每次往队尾加一个元素即一次单节点更新,注意本题的数据范围,其实并不用开 long long,具体请 ...

  3. 洛谷P1198 [JSOI2008]最大数

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

  4. 洛谷 - 试炼场(全部题目备份)

    整理的算法模板合集: ACM模板 目录 1.新手村 1 - 1 洛谷的第一个任务 1 - 2 顺序与分支 1 - 3 循环!循环!循环! 1 - 4 数组 1 - 5 简单字符串 1 - 6 过程函数 ...

  5. 低价购买(洛谷 1108)

    低价购买(洛谷 1108) 题目描述 "低价购买"这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:"低价购买:再低价购买& ...

  6. 【蓝桥杯专题】 贪心(C++ | 洛谷 | acwing | 蓝桥)

    菜狗现在才开始备战蓝桥杯QAQ 文章目录 [蓝桥杯专题] (C++ | 洛谷 | acwing | 蓝桥) 1055. 股票买卖 II AcWing 104. 货仓选址 传递糖果 AcWing 112 ...

  7. 洛谷千题复习计划(一)(Codeforces + AtCoder)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 每天花一个小时简单复习一下我写过的洛谷的题目! 虽然还没有到千题,但是快了(等我复习完这些以后我 lu ...

  8. 洛谷or牛客数据结构+算法

    栈思想:先进后出 tips:栈里能放下标就放下标 (牛客)小c的计事本(直接用stack可以简化代码,且不会被自己绕晕,当时没意识到) (牛客)吐泡泡(没意识到用栈),(牛客)好串 1.后缀表达式(栈 ...

  9. 【数学1】基础数学问题 - 题单 - 洛谷

    这里写目录标题 [[数学1]基础数学问题 - 题单 - 洛谷](https://www.luogu.com.cn/training/117) [P1143 进制转换](https://www.luog ...

  10. 洛谷-题解 P2672 【推销员】

    独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...

最新文章

  1. 5.matlab 中的sort
  2. VO 2 具体的过程
  3. 设计模式 — 创建型模式 — 建造者模式
  4. ActFrameWork集成Beetlsql的Mapper功能
  5. go context学习
  6. 使用STM32的USB模块中后对USB缓冲区的认识
  7. 【BZOJ1095】捉迷藏,动态点分治
  8. 开创交互式电脑绘图先河,虚拟现实之父传奇
  9. windows和linux 修改 hosts的路径
  10. max3232ese_【MAX3232ESE+ PDF数据手册】_中文资料_引脚图及功能_(美信 Maxim Integrated)-采芯网...
  11. ppt背景图片php,ppt背景图片怎么设置 ppt幻灯片制作视频
  12. 科技护肤品,买还是不买
  13. 2021 ACA世界大赛中国赛区王者诞生
  14. 哈尔滨工业大学计算机考研难吗,哈尔滨工业大学计算机考研经验:只有意志坚强才能到达彼岸...
  15. MFC添加鼠标右键菜单
  16. 如何隐藏QDockWidget的标题栏
  17. 蒙特卡洛树搜索(MCTS)
  18. java中 字符串的补位
  19. 8个商用图片素材库,你一定要收藏
  20. ORA-27072、ORA-27072错误解析

热门文章

  1. 游戏服务器炸了多久能修复,DNF:腾讯游戏服务器炸了,仅仅几分钟玩家们却损失惨重...
  2. NX/UG二次开发—其他—分享几个UG内部函数
  3. PHP长方体体积,长方体的体积课件|小学数学,北师大版,五年级下册,数学课件下载_21课件_21世纪教育网...
  4. 孙悟空:越风光,越可怜
  5. ASP注入漏洞全接触[转自www.hacker.com.cn 黑客防线]
  6. 阿里云弹性计算产品总监王志坤:在分布式云领域的产品布局和最佳实践
  7. AutoCAD入门级小技巧教程
  8. 外手机QQ2008的使用方法
  9. 北斗授时服务器(时钟系统)是如何完成时间同步的
  10. 大地诗景:银川 (转载)