博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu4699-Editor
阅读量:4922 次
发布时间:2019-06-11

本文共 1601 字,大约阅读时间需要 5 分钟。

Sample Input
8
I 2
I -1
I 1
Q 3
L
D
R
Q 2
Sample Output
2 3
发现IDLR四种操作都在光标处发生,且操作完成后光标至多移动1个位置,根据这种“始终在序列中间某个指定位置进行修改”的性质,我们不难想到一个类似对顶栈的做法A栈存储从序列开始到当前光标位置的子序列,B栈存储光标位置到结束的子序列,且二者都以光标所在的那一段为栈顶。k不超过光标,所以维护下A栈的前缀和最大值即可。 因为序列中有复数,f[0]初值不能是0,QaQ
#include 
#define ll long longusing namespace std;const int N=1e6+100;const int inf=0x3f3f3f3f;stack
A,B;int f[N],sum[N];char op;int n,x;int main(){ while (scanf("%d",&n)!=EOF) { memset(f,0,sizeof(f)); memset(sum,0,sizeof(f)); while (!A.empty()) A.pop(); while (!B.empty()) B.pop(); f[0]=-inf; for (int i=1;i<=n;i++) { scanf(" %c",&op); if (op=='I') { scanf("%d",&x); A.push(x); int m=A.size(); sum[m]=sum[m-1]+x; f[m]=max(sum[m],f[m-1]); } else if (op=='L'&&!A.empty()) { x=A.top(); A.pop(); B.push(x); } else if (op=='R'&&!B.empty()) { x=B.top(); B.pop(); A.push(x); int m=A.size(); sum[m]=sum[m-1]+x; f[m]=max(sum[m],f[m-1]); } else if (op=='D') { if (!A.empty()) A.pop(); } else if(op=='Q') { scanf("%d",&x); printf("%d\n",f[x]); } } } return 0;}
View Code

 

转载于:https://www.cnblogs.com/tetew/p/9648521.html

你可能感兴趣的文章
springcloud14---zuul
查看>>
阻塞队列---ArrayBlockingQueue,LinkedBlockingQueue,DelayQueue源码分析
查看>>
sass05 数据类型,数据运算
查看>>
Git常用命令
查看>>
洛谷 P1644 跳马问题
查看>>
[Flex] ButtonBar系列——flex3 ButtonBar样式之颜色的填充
查看>>
表单输入实时检测
查看>>
[NOI1995]石子合并
查看>>
oralce问题
查看>>
oracle 显示所有表、SID、sqlplus连接数据库
查看>>
SpringMVC和AJAX交互
查看>>
【转】Android下录制的mp4视频以http流媒体的形式播放不了
查看>>
dns缓存刷新时间是多久?dns本地缓存时间介绍
查看>>
PPP协议
查看>>
luogu P1541 (dp)
查看>>
元件製作之五(光碟機元件)
查看>>
javascript--正则表达式--更新中
查看>>
随手记录一些开发者博客和技术网站
查看>>
Linux中国 QQ 交流群 大全
查看>>
常用Maven插件介绍
查看>>