码迷,mamicode.com
首页 > 其他好文 > 详细

【HDU 4699】 Editor

时间:2018-06-29 21:06:33      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:bsp   前缀   ace   http   ref   mst   clu   names   scanf   

【题目链接】

           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\n",f[x]);
                        }
                }
        }
        
        return 0;
    
}

 

【HDU 4699】 Editor

标签:bsp   前缀   ace   http   ref   mst   clu   names   scanf   

原文地址:https://www.cnblogs.com/evenbao/p/9245355.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!