多校十 Hdu 4699
来源:互联网 发布:滨江淘宝摄影基地在哪 编辑:程序博客网 时间:2024/05/16 15:57
终于AC了。。
今天赛场上一直看这题,一直坚信用树状数组做,然后写了一发,一直TLE,没办法,确实没法优化。。只好放弃
赛后看解题报告,
栈A, B维护光标之前(之后)的序列
I x A.push(x)
D A.pop()
L B.push(A.pop())
R A.push(B.pop())
▶ 对于栈A 中的每个元素,额外维护前缀和,以及前缀和的
最大值
然后很信任的开了两个栈,写了好久,交一发,RE了!手动开栈WA了!肯定还有错,我发现只用栈是不可以的,因为题目问的是1-k之间找最大值,我的栈尾不一定就是第K个,唉~很傻逼的想要是栈可以直接取第k个元素就可以了,想到这,突然发现要取第k个元素,那么就用vector吧!vector 模拟栈。。
用vector写完了,然后交一发WA!!,天呀,不甘心,后面一直再检查,才发现那个光标位置出了一点错,改了一下A!!
代码:
#include <iostream>#include <cstdio>#include <string>#include <string.h>#include <map>#include <vector>#include <cstdlib>#include <cmath>#include <algorithm>#include <stack>//#pragma comment(linker, "/STACK:10240000000,10240000000")//手动加桟---外挂using namespace std;const int M=1000005;struct node{ int v; int sum; int maxsum;};vector<node>A,B;//stack<node>A,B;//之前的栈int main(){ int t,k,s; char a[3]; while(scanf("%d",&t)!=EOF) { A.clear(); B.clear(); while(t--) { scanf("%s",a); if(a[0]=='I') { scanf("%d",&s); node next; next.sum=s; next.v=s; next.maxsum=s; if(A.size()>0) { node cur=A.back(); next.sum=cur.sum+next.v; next.maxsum=max(cur.maxsum,next.sum); A.push_back(next); } else { A.push_back(next); } } else if(a[0]=='L') { if(A.size()>0) { node cur=A.back(); B.push_back(cur); A.pop_back(); if(A.size()>0)//没判A空时就WA了 { node vv= A.back(); A.pop_back(); vv.sum=cur.sum-cur.v; vv.maxsum=max(vv.sum,vv.maxsum); A.push_back(vv); } } } else if(a[0]=='R') { if(B.size()>0) { if(A.size()>0) { node cur=A.back(); node next=B.back(); //B.pop(); B.pop_back(); next.sum=cur.sum+next.v; next.maxsum=max(cur.maxsum,next.sum); A.push_back(next); } else { node next=B.back(); B.pop_back(); next.sum=next.v; next.maxsum=next.v; A.push_back(next); } } } else if(a[0]=='D') { if(A.size()>0) { node vv=A.back(); A.pop_back(); if(A.size()) { node cur=A.back(); A.pop_back(); cur.sum=vv.sum-vv.v; cur.maxsum=max(cur.maxsum,cur.sum); A.push_back(cur); } } } else if(a[0]=='Q') { scanf("%d",&k); printf("%d\n",A[k-1].maxsum); } } } return 0;}
- 多校十 Hdu 4699
- hdu 4699
- HDU 4699
- 多校十Hdu 4704 Sum
- 多校十 Hdu 4696 Answers
- hdu 4699 Editor
- HDU 4699 Editor
- hdu 4699 Editor 模拟
- hdu 4699 Editor(Splay)
- hdu 4699 模拟栈
- Hdu 4699 Editor(Splay)
- HDU 4699 题解
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- 利用Delphi编写Socket通信程序
- 图说Hadoop源码-NameNode: NetworkTopology.InnerNode
- 处理报表需要考虑的问题
- Android开发把项目打包成apk
- Android WebView缓存策略详解
- 多校十 Hdu 4699
- C++ primer习题10.9
- Git常用命令总结记录
- php数据库连接的资源句柄问题
- 进程间通信—信号(一)
- Windows SDK下ListBox控件的使用
- poj 题目1883 排列(STL----next_permutation)
- CSDN 博客起航
- sdf d