HDU - 4699 对顶栈】的更多相关文章

Get到了全新O(1)替代部分伸展树功能的姿势 左栈stk1维护当前信息,右栈stk2维护历史删除信息 题目求的是严格的前缀和(且小于当前指针)那就每次左栈新增时再更新前缀和信息就好 即使把题面换成最大子段和也是一样搞法 要是O(1)求1到k的最大/小值?再来多一个维护历史的栈..应该可以吧 /*H E A D*/ stack<int> stk1,stk2; ll sum[maxn],maxsum[maxn]; int main(){ int Q,op,x,k; char str[50]; w…
Problem Description   Sample Input 8 I 2 I -1 I 1 Q 3 L D R Q 2   Sample Output 2 3 Hint The following diagram shows the status of sequence after each instruction: 题意:n个操作 5种操作,I x:该光标位置插入x并且光标后移 D :删除光标前的一个数 L :光标左移 R :光标右移 Q k:询问位置k之前的最大前缀和,k不会超过当前…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4699 Problem Description Sample Input8I 2I -1I 1Q 3LDRQ 2 Sample Output23 Hint 题意: 维护一个整数序列的编辑器,有以下五种操作,操作总数不超过 $10^6$. $I \: x$:在当前光标位置之后插入一个整数 $x$,插入后光标移动到 $x$ 之后: $D$:删除光标前的一个整数: $L$:光标左移一格: $R$:光标右移一…
题目大意: 给定一个整数序列 维护5种操作 次数<1e6 I x: 光标位置插入x 然后光标位于x之后 D: 删除光标前一个数 L: 光标左移 R: 光标右移 Q k: 询问位置k之前的最大前缀和 选用"对顶栈"的做法 大致示意图如下: 对顶栈stkl, stkr直接通过数组模拟即可实现 以I x的操作为例, 需要: 1)将x插入stkl; 2)更新s数组 当前的前缀和 = 之前的前缀和 + x 3)更新f数组 记录该位置的最大前缀和 故有如下的代码: // tl用于记录左栈的栈…
hdu 4699  Editor 题意:对一个数列进行操作,光标位置后面插入一个权值为x的数,删除光标前的那个数,光标左移一位,光标右移一位,求到k位置的最大的前缀和.. 注意这里的k是在光标之前的,由于这个条件,所以这题又简单的2个栈维护可以解,如果没有这个条件,那么就要用伸展树了. 栈的解法叉姐的解题报告有,我这里说说伸展树的做法, 1.8MS卡过. 我们用cur表示光标在第几个数的右边,size表示数的总个数. 对于操作L: 没有移到最左边就cur-- 对于操作R: 没有移到最右边就cur…
题目链接:https://codeforces.com/contest/670/problem/E 题意: 给出一个已经匹配的括号串,给出起始的光标位置(光标总是指向某个括号). 有如下操作: 1.往左移动一下光标: 2.往左移动一下光标: 3.删除当前光标指向的括号,以及和它匹配的那个括号,以及这两个括号之间的所有括号. 要求你给出在做完所有操作后的括号串. 题解: 用对顶栈进行模拟.由于删除是不可逆的,因此删除的总时间复杂度为 $O(n)$,因此所有 $m$ 次操作的总时间复杂度为 $O(n…
思路:刚开始用STL中的栈,一直RE……,之后改为手动模拟栈操作,在注意点细节就可以了!!! 代码如下: #include<cstdio> #include<cstring> #include<algorithm> #define M 1000001 using namespace std; int A[M],B[M],a[M],s[M],cur,x,q,l,r; char c; int main() { while(scanf("%d",&…
维护两个栈,分别存光标前和光标后的数 再维护前缀和的栈 和 前缀和最大值的栈 注意一下左移,右移,删除到顶了就不操作了 5个操作 I x : 光标处插入x  -----> s1.push(x) D  : 光标前删除    -----> s1.pop() L  :  光标左移      -----> s2.push(s1.top())   s1.pop() R  :  光标右移      -----> s1.push(s2.top())   s2.pop() Q k : 输出前k个数…
Editor Time Limit: 3000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 2818 Accepted Submission(s): 825 Problem Description Sample Input 8 I 2 I -1 I 1 Q 3 L D R Q 2 Sample Output 2 3 Hint The following diagram…
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=4699 [算法] 维护两个栈,一个栈放光标之前的数,另外一个放光标之后的数 在维护栈的同时求最大前缀和,即可 [代码] #include<bits/stdc++.h> using namespace std; ; const int INF = 2e9; class mstack { private : int tot; int s[MAXN]; public : inline void cle…