hdu 4699 Editor(单调栈)
2015-11-12 14:43
369 查看
题目链接:hdu 4699 Editor
解题思路
光标前后各用一个栈维护即可代码
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 1e6 + 5; struct Stack { int n, s[maxn]; void init() { n = 0; } bool empty() { return n == 0; } void push(int x) { s[n++] = x; } void pop() { n--; } int top() { return s[n-1]; } int get(int k) { return s[k-1]; } }L, R; int Q, S[maxn]; char order[20]; int main () { while (scanf("%d", &Q) == 1) { L.init(), R.init(); int mv = 0, sum = 0, x; while (Q--) { scanf("%s", order); if (order[0] == 'I') { scanf("%d", &S[mv]); sum += S[mv++]; if (L.empty()) L.push(sum); else L.push(max(sum, L.top())); } else if (order[0] == 'D' && !L.empty()) { sum -= S[--mv]; L.pop(); } else if (order[0] == 'L' && !L.empty()) { R.push(S[--mv]); sum -= S[mv]; L.pop(); } else if (order[0] == 'R' && !R.empty()) { S[mv] = R.top(); R.pop(); sum += S[mv++]; if (L.empty()) L.push(sum); else L.push(max(sum, L.top())); } else if (order[0] == 'Q') { scanf("%d", &x); printf("%d\n", L.get(x)); } } } return 0; }
相关文章推荐
- CSS3 文本超出后显示省略号...
- Ubuntu linaro(Lubuntu ARM) (Cubieboard CC-A80) Chromium 运行Selenium Webdriver
- c源文件中要包含自己的头文件
- QML与C++混合编程详解
- Sql Server, 查询数据库中表的大小
- Class.forName()、Class.forName().newInstance() 、New 三者区别!
- AFNetWorking方法
- FileInputStream与FileOutputStream类
- Oracle 自定义函数示例
- MCP23S18学习总结
- Automysqlbackup: WARNING: Turning off multicore support, since pigz isn’t there.
- 前端学习规划
- karma+requirejs+angular 测试
- Struts Ajax 导出Excel
- iMindMap该怎样用来画思维导图
- matlab学习笔记(四)--- 图像的几何操作
- linux 下mysql源码安装步骤:
- HDU 2577 How to Type 简单dp题
- 托管DLL和非托管DLL的区别
- hdu 4698 Counting(计数)