Luogu P2182JZOJ 3922数列编辑器
Posted gjy-juruo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Luogu P2182JZOJ 3922数列编辑器相关的知识,希望对你有一定的参考价值。
题面:
Description
小Z是一个爱好数学的小学生。最近,他在研究一些关于整数数列的性质。
为了方便他的研究,小Z希望实现一个叫做“Open Continuous Lines Processor”的数列编辑器。
一开始,数列编辑器里没有数字,只有一个光标。这个数列编辑器需要支持五种操作。
? ( exttt{I}) x 在当前光标前插入数字 x。
? ( exttt{D}) 删除当前光标前的数字。
? ( exttt{L}) 光标向前移动一个数字。
? ( exttt{R}) 光标向后移动一个数字。
? ( exttt{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。
正文:
考试的时候是开了个双向链表存整个数列,再开两个指针分别指向整个链表第一个和光标前一个。但查询的时候很显然是( heta(n))的时间复杂度,会( ext{TLE})。
所以我们可以用到栈。开两个栈分别表示光标左边的数列(s1)和光标右边的数列(s2)。再开个数组(Max_k)表示第k位及之前最大的前缀和。
当执行( exttt{L})时,把栈顶的值移到另一个栈里。执行( exttt{R})时,把栈顶的值移到另一个栈里的同时,更新(Max),执行( exttt{D})时,直接删除(s1)栈顶。执行( exttt{I})时,入栈、更新(Max)。输出时直接返回(Max_k)就好了。
以上是关于Luogu P2182JZOJ 3922数列编辑器的主要内容,如果未能解决你的问题,请参考以下文章
[jzoj 6084] [GDOI2019模拟2019.3.25] 礼物 [luogu 4916] 魔力环 解题报告(莫比乌斯反演+生成函数)
[JZOJ3615]NOI2014模拟数列(平面几何+二维线段树)
jzoj 1349 luogu P1390最大公约数 & 公约数的和
ybtoj 状压DP课堂过关 例题1jzoj 1266 luogu P1879 [USACO06NOV]Corn Fields G & 玉米田 & 种植方案
jzoj 7184luogu P7404前缀后缀「JOI 2021 Final」 とてもたのしい家庭菜園 4(有趣的家庭菜园 4)