题意

传送门 HDU 4699 Editor

题解

操作始终在序列中间某个指定位置(即光标)进行修改,参照动态维护中位数的对顶堆算法,使用对顶栈对序列进行维护。

建立 222 个栈,分别维护序列在光标左边与右边的部分,栈顶对应靠近光标的位置。为了维护某个位置之前的前缀和最大值,使用数组记录光标之前位置的前缀和最小值,当数据入栈时 O(1)O(1)O(1) 更新即可。

根据对顶栈算法,在 O(1)O(1)O(1) 时间内实现了各类操作和询问。

#include <algorithm>
#include <cstdio>
using namespace std;
const int maxn = 1000005, inf = 0x3f3f3f3f;
int Q, A[maxn], B[maxn], S[maxn], F[maxn];int main()
{S[0] = 0, F[0] = -inf;while (~scanf("%d", &Q)){int a = 0, b = 0;while (Q--){char op;scanf(" %c", &op);if (op == 'I'){int x;scanf("%d", &x);A[++a] = x, S[a] = A[a] + S[a - 1], F[a] = max(S[a], F[a - 1]);}else if (op == 'D' && a)--a;else if (op == 'L' && a)B[++b] = A[a--];else if (op == 'R' && b)A[++a] = B[b--], S[a] = A[a] + S[a - 1], F[a] = max(S[a], F[a - 1]);else if (op == 'Q'){int k;scanf("%d", &k);printf("%d\n", F[k]);}}}return 0;
}

HDU 4699 对顶栈相关推荐

  1. hdu 4699 2个栈维护 or 伸展树 (2013多校联合)

    hdu 4699  Editor 题意:对一个数列进行操作,光标位置后面插入一个权值为x的数,删除光标前的那个数,光标左移一位,光标右移一位,求1到k位置的最大的前缀和.. 注意这里的k是在光标之前的 ...

  2. hdu 4699 Editor(splay tree 伸展树)

    hdu 4699  Editor 题意:对一个数列进行操作,光标位置后面插入一个权值为x的数,删除光标前的那个数,光标左移一位,光标右移一位,求到k位置的最大的前缀和.. 解题思路:标乘是用了栈进行维 ...

  3. Aizu - 1407 Parentheses Editor(对顶栈+模拟)

    题目链接:点击查看 题目大意:给出一个字符串,只由 ' ( ' , ' ) ' 和 ' - ' 组成,初始时给出一个空串 s,三种字符所代表的操作如下: ' ( ' :在 s 后添加一个左括号 ' ) ...

  4. HDU 3328 Flipper 栈 模拟

    HDU 3328 Flipper 栈 模拟 首先想说,英语太烂这题读了很长时间才读懂......题意是说输入有几张牌,然后输入这些牌的初始状态(是面朝上还是面朝下),然后输入操作方式,R表示翻一下右边 ...

  5. 【HDOJ4699】Editor(对顶栈,模拟)

    problem 维护一个整数序列的编辑器,支持5种操作,操作数< 1e6 I x:在光标后插入数x,插入后光标移到x后 D:删除光标前的一个整数 L:光标左移一个位置 R:光标右移一个位置 Q ...

  6. hdu4699-Editor【对顶栈】

    正题 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4699 大意 有5种操作 1.在光标处写入一个数字 2.在光标处删除一个数字 3.4.将光标往 左 ...

  7. hdu 4252(单调栈)

    题意:一张相片上的很多建筑相互遮住了,根据高低不同就在相片上把一座高楼的可见部分作为一个矩形,并用数字描述其高度,若一张相片上的两个建筑群中间有空地,高度则为0;求最少有多少个建筑; 解题思路:这道题 ...

  8. Train Problem I hdu 1022(栈)

    http://acm.split.hdu.edu.cn/showproblem.php?pid=1022 题意:给出火车的进站与出站顺序,判断是否可以按照给出的出站顺序出站. #include < ...

  9. Editor HDU 4699

    题目 #include <iostream> using namespace std;const int N = 1e6 + 10; int p[2], a[N], b[N], sum[N ...

  10. hdu 4699 Editor(Splay)

    题意:对一个数列进行操作,光标位置后面插入一个权值为x的数,删除光标前的那个数,光标左移一位,光标右移一位,求到k位置的最大的前缀和. Splay在比赛的时候写得太Navie,T了整场. 左移和右移的 ...

最新文章

  1. P1155 双栈排序(二分图染色)
  2. 快学Scala-第八章 继承
  3. python编程入门经典实例-终于明了python入门经典实例
  4. Codeforces 814C - An impassioned circulation of affection
  5. 数据库设计笔记——概述(一)
  6. 关于.NET框架的主要组件 10:45:02
  7. QNetworkAccessManager的异步与线程
  8. 一个网卡配置两个不同网段的IP地址(比如应用道闸项目)
  9. 腾讯云推出首款自研服务器星星海;苹果新款Mac Pro整套配齐超30万;Fedora 31稳定版发布|极客头条...
  10. SCPPO(八):登录实现逻辑
  11. Jenkins Robot framework 持续集成环境搭建
  12. 直流电动机的调速 用单片机产生PWM控制
  13. android 文件管理 显示缩略图,如何创建从Android视频文件路径视频缩略图
  14. 机器人动力学参数辨识
  15. 做微商不推广,也能赚钱?
  16. torchdiffeq中odeint函数的输入输出参数分析
  17. html 字幕文件怎么打开,srt文件怎么打开
  18. Spring加载时报错处理
  19. cv2.error: OpenCV(4.5.1) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-buil
  20. java 反射为何耗性能_Java反射的性能成本

热门文章

  1. php 0x80004005,错误类型:Provider (0x80004005)未指定的错误 的一个处理方法
  2. HTML链接会议申请,会议流程.html
  3. 五线谱软件测试初学者,学习五线谱(初学者专用).pdf
  4. Push to branch was rejected
  5. c语言中0x13,int 0x13 常用功能详解
  6. Python 实现字节转换函数
  7. java简历校园经历_简历校园经历如何编
  8. tplink无线路由dns服务器,TPLINK无线路由器如何设置DNS服务器的DNS服务器地址,TPLINK无线路由器的地址 | 192.168.1.1手机登陆...
  9. GitHub 近两万 Star,无需编码,可一键生成前后端代码,开源项目
  10. Hugo博客双线部署