HDU 4699 Editor

Posted evenbao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 4699 Editor相关的知识,希望对你有一定的参考价值。

【题目链接】

           http://acm.hdu.edu.cn/showproblem.php?pid=4699

【算法】

           维护两个栈,一个栈放光标之前的数,另外一个放光标之后的数

            在维护栈的同时求最大前缀和,即可

【代码】

           

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1e6 + 5;
const int INF = 2e9;

class mstack
{
        private :
                int tot;
                int s[MAXN];
        public :
                inline void clear()
                {
                        tot = 0;
                }
                inline void push(long long x)
                {
                        tot++;
                        s[tot] = x;
                }
                inline void pop()
                {
                        tot--;
                }
                inline long long top()
                {
                        return s[tot];
                }
                inline bool empty()
                {
                        return tot == 0;
                }
} s1,s2;

int q,pos;
long long x;
long long sum[MAXN],f[MAXN];
char opt[5];

int main() 
{
        
        while (scanf("%d",&q) != EOF)
        {
                f[0] = -INF;
                s1.clear();
                s2.clear();
                pos = 0;
                while (q--)
                {
                        scanf("%s",&opt);
                        if (opt[0] == I)
                        {
                                scanf("%lld",&x);
                                s1.push(x);
                                pos++;
                                sum[pos] = sum[pos-1] + x;
                                f[pos] = max(f[pos-1],sum[pos]);
                        } 
                        if (opt[0] == D)
                        {
                                if (s1.empty()) continue;
                                s1.pop();
                                pos--;
                        }
                        if (opt[0] == L)
                        {
                                if (s1.empty()) continue;
                                x = s1.top();
                                s1.pop();
                                s2.push(x);
                                pos--;
                        }
                        if (opt[0] == R)
                        {
                                if (s2.empty()) continue;
                                x = s2.top();
                                s2.pop();
                                s1.push(x);
                                pos++;
                                sum[pos] = sum[pos-1] + x;
                                f[pos] = max(f[pos-1],sum[pos]);    
                        }
                        if (opt[0] == Q)
                        {
                                scanf("%lld",&x);
                                printf("%lld
",f[x]);
                        }
                }
        }
        
        return 0;
    
}

 

以上是关于HDU 4699 Editor的主要内容,如果未能解决你的问题,请参考以下文章

[HDU4669]Editor (栈)

HDOJ 4699 Editor 栈 模拟

HDOJ 4699 Editor 对顶栈

HDU - 4699 对顶栈

栈专题练习

hdu-2509-反nim博弈