反正当时是没有想到怎么做,但发现用栈模拟后就有思路了。

题意就是找光标前的位置的最大前缀和,那最朴素的实现就是拿数组模拟,每一次insert和delete都重新更新一下maxprev和sum和整个序列的值;后来发现maxprev和sum不用每次都更新,而是只要保证光标pos位置前的值都对就可以了(因为询问只关心了前pos位的最大前缀和),但即便是这样还是得O(n)更新insert的delete(因为要维护a数组)。

这个时候就要有stack的思想了,s1栈从底下到上面为1到光标之间的数,然后s2从最上面到最底下是从光标后一位到序列的最后一个数。

所以就能做到O(1)更新了。

1.注意下用了关同步的优化就不能用scanf,printf;不然会出现说不清楚的错误

2.输入用char不用char数组的话小心换行符

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<iomanip>
#include<algorithm>
#include<vector>
#define INF 2e9
#define maxnode 100000
#define ll long long
#define lowbit(x) (x&(-x))
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
using namespace std;int maxprev[1000005],sum[1000005];
stack<int> s1,s2;int main(){//ios::sync_with_stdio(false);int q;while( ~scanf("%d",&q) ){int pos=0,len=0;maxprev[0]=-INF; //memset(maxprev,0,sizeof(maxprev));//memset(sum,0,sizeof(sum));while( !s1.empty() ) s1.pop();while( !s2.empty() ) s2.pop(); //s1里面存cursor前的数//s2里面存cursor后的数//任意时刻maxprev[pos]和sum[pos]都是合法的 for(int i=1;i<=q;i++){char op[5]; scanf("%s",op);if( op[0]=='I' ){int num; scanf("%d",&num);s1.push( num ); //把num放在s1的首 pos++;sum[pos]=sum[pos-1]+num;maxprev[pos]=max( maxprev[pos-1],sum[pos] );}else if( op[0]=='D' ){s1.pop(); pos--;}else if( op[0]=='L' ){if( s1.empty() ) continue;pos--;int tmp=s1.top(); s1.pop(); s2.push(tmp);//不用计算新的maxprev
            }else if( op[0]=='R' ){if( s2.empty() ) continue;int tmp=s2.top(); s2.pop(); s1.push(tmp);sum[pos+1]=sum[pos]+s1.top();maxprev[pos+1]=max( maxprev[pos],sum[pos+1] ); pos++;}else if( op[0]=='Q' ){int k; scanf("%d",&k);printf("%d\n",maxprev[k]);}}}return 0;
}

转载于:https://www.cnblogs.com/ZhenghangHu/p/9759435.html

HDU 4699 Editor【模拟栈】相关推荐

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

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

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

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

  3. hdu 4699 Editor(Splay)

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

  4. SCU4438 Censor(审查员) (KMP算法与模拟栈的应用 || HASH表与模拟栈的结合)

    Censor frog is now a editor to censor so-called sensitive words (敏感词). She has a long text pp. Her j ...

  5. 六、使用数组模拟栈的思路及代码实现

    使用数组模拟栈的实现过程 1.栈的介绍 (1) 栈的英文为(stack) (2) 栈是一个先入后出(FILO-First In Last Out)的有序列表. (3) 栈(stack)是限制线性表中元 ...

  6. 第一回写的用arraylist模拟栈操作

    package hashMap; import java.util.ArrayList; import d.Student; /*** 用ArrayList模拟栈操作* @author zhujiab ...

  7. 032_使用ArrayDeque模拟栈结构

    import java.util.ArrayDeque; import java.util.Iterator;/*** 使用ArrayDeque模拟栈结构*/ public class DequeSt ...

  8. 数组模拟栈和队列板子

    使用数组模拟数据结构栈和队列 栈:后进先出 对于栈:我们使用tt表示栈顶的下标,如果tt==0表示栈空 队列:先进先出 对于队列,我们使用hh表示队首,tt表示队尾,tt初始化为-1,判断队列是否为空 ...

  9. Leetcode402 remove-k-digits贪心+vector模拟栈的思想

    题目 给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. 注意: num 的长度小于 10002 且 ≥ k. num 不会包含任何前导零. 示例 1 : 输入: ...

  10. CCF-CSP 201903-2 二十四点 Python语言 模拟栈实现

    项目场景: 二十四点问题本质是处理表达式,一提到处理表达式第一反应大概就是使用栈来处理,虽然网上大部分使用python语言处理二十四点问题都是利用强大的eval()函数,但我仍然想要使用python的 ...

最新文章

  1. NeurIPS 2020不用抢票了!官方宣布改线上举办,网友:nice!已白嫖3个顶会
  2. Python SQLAlchemy
  3. 笔记本电脑没有鼠标怎么拖动_适合办公鼠标要如何选择?除了便携更需要这些...
  4. “跳过更新”还得付费?Docker 新变化引发群嘲
  5. 使用Python教你秒搭本地服务器
  6. 使用接口接收json数据
  7. matlab 去掉相同的行数据库,关于UCI数据库每行数据列数不一致的处理代码
  8. SPSS统计描述分析
  9. lua牛牛算法和大小比较
  10. XSS进阶二 ——合天网安实验室学习笔记
  11. Win10下的WSL(Linux子系统)开发环境搭建(PHP+Nginx+Mysql+Composer)
  12. 嵌入式软件工程师面试题及答案
  13. 分享一个超级狠的面试题与经验
  14. server 2008 r2 怎么打开任务管理?
  15. stm32h743外部RAM非字节对齐访问,引起的hard fault
  16. Salesforce开发教程(上下)
  17. Dubbo线程池满导致宕机的案例分析解决
  18. 利用Tensorflow构建RNN实现垃圾邮件分类
  19. 如何本地安装微擎系统
  20. Commit cannot be completed since the group has already rebalanced and assigned the

热门文章

  1. 2019各种比赛总结
  2. 评论:中国网络游戏虚拟物品交易的前景
  3. 小红帽linux各功能中英,英文短剧lbrack;小红帽rsqb;剧本台词完整版---中英对照文本版...
  4. 如何在Linux中克隆一个分区或者硬盘驱动器
  5. html 鼠标放上去变色,css3 鼠标经过div背景变色
  6. python 实现QQ邮箱发送邮件
  7. (翻译)用户友好的表格的9种设计技巧
  8. linux recovery模式是什么,recovery.img是什么
  9. 拍摄须知ISO、快门、光圈、曝光概念
  10. 斗鱼弹幕服务器连接协议,斗鱼弹幕服务器第三方接入协议v1 6 2.pdf