HDU 4699 对顶栈
题意
传送门 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 对顶栈相关推荐
- hdu 4699 2个栈维护 or 伸展树 (2013多校联合)
hdu 4699 Editor 题意:对一个数列进行操作,光标位置后面插入一个权值为x的数,删除光标前的那个数,光标左移一位,光标右移一位,求1到k位置的最大的前缀和.. 注意这里的k是在光标之前的 ...
- hdu 4699 Editor(splay tree 伸展树)
hdu 4699 Editor 题意:对一个数列进行操作,光标位置后面插入一个权值为x的数,删除光标前的那个数,光标左移一位,光标右移一位,求到k位置的最大的前缀和.. 解题思路:标乘是用了栈进行维 ...
- Aizu - 1407 Parentheses Editor(对顶栈+模拟)
题目链接:点击查看 题目大意:给出一个字符串,只由 ' ( ' , ' ) ' 和 ' - ' 组成,初始时给出一个空串 s,三种字符所代表的操作如下: ' ( ' :在 s 后添加一个左括号 ' ) ...
- HDU 3328 Flipper 栈 模拟
HDU 3328 Flipper 栈 模拟 首先想说,英语太烂这题读了很长时间才读懂......题意是说输入有几张牌,然后输入这些牌的初始状态(是面朝上还是面朝下),然后输入操作方式,R表示翻一下右边 ...
- 【HDOJ4699】Editor(对顶栈,模拟)
problem 维护一个整数序列的编辑器,支持5种操作,操作数< 1e6 I x:在光标后插入数x,插入后光标移到x后 D:删除光标前的一个整数 L:光标左移一个位置 R:光标右移一个位置 Q ...
- hdu4699-Editor【对顶栈】
正题 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4699 大意 有5种操作 1.在光标处写入一个数字 2.在光标处删除一个数字 3.4.将光标往 左 ...
- hdu 4252(单调栈)
题意:一张相片上的很多建筑相互遮住了,根据高低不同就在相片上把一座高楼的可见部分作为一个矩形,并用数字描述其高度,若一张相片上的两个建筑群中间有空地,高度则为0;求最少有多少个建筑; 解题思路:这道题 ...
- Train Problem I hdu 1022(栈)
http://acm.split.hdu.edu.cn/showproblem.php?pid=1022 题意:给出火车的进站与出站顺序,判断是否可以按照给出的出站顺序出站. #include < ...
- Editor HDU 4699
题目 #include <iostream> using namespace std;const int N = 1e6 + 10; int p[2], a[N], b[N], sum[N ...
- hdu 4699 Editor(Splay)
题意:对一个数列进行操作,光标位置后面插入一个权值为x的数,删除光标前的那个数,光标左移一位,光标右移一位,求到k位置的最大的前缀和. Splay在比赛的时候写得太Navie,T了整场. 左移和右移的 ...
最新文章
- P1155 双栈排序(二分图染色)
- 快学Scala-第八章 继承
- python编程入门经典实例-终于明了python入门经典实例
- Codeforces 814C - An impassioned circulation of affection
- 数据库设计笔记——概述(一)
- 关于.NET框架的主要组件 10:45:02
- QNetworkAccessManager的异步与线程
- 一个网卡配置两个不同网段的IP地址(比如应用道闸项目)
- 腾讯云推出首款自研服务器星星海;苹果新款Mac Pro整套配齐超30万;Fedora 31稳定版发布|极客头条...
- SCPPO(八):登录实现逻辑
- Jenkins Robot framework 持续集成环境搭建
- 直流电动机的调速 用单片机产生PWM控制
- android 文件管理 显示缩略图,如何创建从Android视频文件路径视频缩略图
- 机器人动力学参数辨识
- 做微商不推广,也能赚钱?
- torchdiffeq中odeint函数的输入输出参数分析
- html 字幕文件怎么打开,srt文件怎么打开
- Spring加载时报错处理
- cv2.error: OpenCV(4.5.1) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-buil
- java 反射为何耗性能_Java反射的性能成本
热门文章
- php 0x80004005,错误类型:Provider (0x80004005)未指定的错误 的一个处理方法
- HTML链接会议申请,会议流程.html
- 五线谱软件测试初学者,学习五线谱(初学者专用).pdf
- Push to branch was rejected
- c语言中0x13,int 0x13 常用功能详解
- Python 实现字节转换函数
- java简历校园经历_简历校园经历如何编
- tplink无线路由dns服务器,TPLINK无线路由器如何设置DNS服务器的DNS服务器地址,TPLINK无线路由器的地址 | 192.168.1.1手机登陆...
- GitHub 近两万 Star,无需编码,可一键生成前后端代码,开源项目
- Hugo博客双线部署