题面:

Description

小Z是一个爱好数学的小学生。最近,他在研究一些关于整数数列的性质。

为了方便他的研究,小Z希望实现一个叫做“Open Continuous Lines Processor”的数列编辑器。

一开始,数列编辑器里没有数字,只有一个光标。这个数列编辑器需要支持五种操作。

• \(\texttt{I}\) x 在当前光标前插入数字 x。

• \(\texttt{D}\) 删除当前光标前的数字。

• \(\texttt{L}\) 光标向前移动一个数字。

• \(\texttt{R}\) 光标向后移动一个数字。

• \(\texttt{Q k}\) 设光标之前的数列是{a1,a2,……,an},输出第k位及之前最大的前缀和,保证k≤n。

Input

第一行包含一个数字 N ,表示操作的个数。

接下来包含 N 行,每行包含一条命令

Output

对于每个Q k 命令,输出一个整数表示这个操作的答案。

Sample Input

8
I 2
I -1
I 1
Q 3
L
D
R
Q 2

Sample Output

2
3

Data Constraint

【数据规模】 对于 50% 的数据,N ≤ 1000; 对于 80% 的数据,N ≤ 100000; 对于 100% 的数据,N ≤ 1000000,插入的数字绝对值大小不会超过 1000。

正文:

考试的时候是开了个双向链表存整个数列,再开两个指针分别指向整个链表第一个和光标前一个。但查询的时候很显然是\(\theta(n)\)的时间复杂度,会\(\text{TLE}\)。

所以我们可以用到栈。开两个栈分别表示光标左边的数列\(s1\)和光标右边的数列\(s2\)。再开个数组\(Max_k\)表示第k位及之前最大的前缀和。

当执行\(\texttt{L}\)时,把栈顶的值移到另一个栈里。执行\(\texttt{R}\)时,把栈顶的值移到另一个栈里的同时,更新\(Max\),执行\(\texttt{D}\)时,直接删除\(s1\)栈顶。执行\(\texttt{I}\)时,入栈、更新\(Max\)。输出时直接返回\(Max_k\)就好了。

最新文章

  1. [转]Android App整体架构设计的思考
  2. 在requirejs中使用qunit
  3. 【Swift学习】Swift编程之旅(四)基本运算符
  4. jeesite笔记
  5. Laravel中URL,ACTION,ROUTE区别
  6. 页面中插入flash,并且给flash添加单击事件控制播放,以及获取相关参数.
  7. 在Eclipse中用TODO标签管理任务
  8. Linux下安装Python pip
  9. InstallShield: cannot extract icon with index 0错误解决方案
  10. C++ for 循环
  11. Cube Stacking(并差集深度+结点个数)
  12. nuget 命令详解
  13. 关于GCJ02和WGS84坐标系的一点实验
  14. UE4实现描边效果
  15. 【一天一道LeetCode】#107. Binary Tree Level Order Traversal II
  16. .NET(C#、VB)APP开发——Smobiler平台控件介绍:SliderView控件
  17. javascript 编程风格 部分精要
  18. mysql之变量
  19. 前端 HTML body标签相关内容 常用标签 定义列表<dl>
  20. Jquery常用开发插件收集

热门文章

  1. 【leetcode】1214.Two Sum BSTs
  2. Python 日期和时间Ⅱ
  3. EXCL单元格公式——组装SQL用
  4. php+大文件上传
  5. windows powershell的常用命令
  6. [CSP-S模拟测试]:数列(数学)
  7. multiple users to one ec2 instance setup
  8. java统计文档中相同字符出现次数(超详细)
  9. 一、基础篇--1.1Java基础-反射的用途和实现
  10. 一、基础篇--1.1Java基础-int 和 Integer 有什么区别,Integer的值缓存范围