zoukankan      html  css  js  c++  java
  • 【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;
        
    }
  • 相关阅读:
    gnats配置文件
    在Mac中安装python,配置python环境
    利用git bash和git gui向git远程仓库提交文件
    os模块
    django中的locale()函数
    django配置静态文件
    sso单点登录
    django get_object_or_404
    关于token
    Django的CSRF机制
  • 原文地址:https://www.cnblogs.com/evenbao/p/9245355.html
Copyright © 2011-2022 走看看