zoukankan      html  css  js  c++  java
  • HDOJ4699 对顶栈

    题目参考

    小蓝p50

    对顶栈/堆用于在序列中间某个指定位置进行修改

    #include <iostream>
    #include <stack>
    #include<algorithm>
    #include <cstring>
    
    using namespace std;
    const int f=-0x3f3f3f3f;
    stack<int> s1,s2;
    int dp[100000];//dp是最大前缀和
    int sum[100000];//sum是前缀和
    //用前缀和去维护最大前缀和(dp)
    int pos=0;//这是光标所在的位置
    int main() {
        int t;
        cin>>t;
        memset(dp, f, sizeof(dp));
        memset(sum, 0, sizeof(sum));
        while(t--) {
    
            char c;
            cin >> c;
            if (c == 'I') {
                int a;
                cin >> a;
                s1.push(a);
                pos++;//这步必须在这里,要不sum溢出
                sum[pos]=sum[pos-1]+a;
                dp[pos]=max(dp[pos-1],sum[pos]);
    
    //            cout<<"sum["<<pos<<"] "<<sum[pos]<<endl;
    //            cout<<"dp[pos] "<<dp[pos];
            }
            else if(c=='D'){
                if(s1.empty())continue;//注意
    
                s1.pop();
                pos--;
            }
            else if(c=='L'){
                if(s1.empty())continue;//注意
    
                int q=s1.top();
                s1.pop();
                s2.push(q);
                pos--;
            }
            else if(c=='R'){
                if(s2.empty())continue;//注意
    
                int q=s2.top();
                s2.pop();
                s1.push(q);
                pos++;
                sum[pos]=sum[pos-1]+q;
                dp[pos]=max(dp[pos-1],sum[pos]);
            }
            else{
                int r;
                cin>>r;
                cout<<dp[r]<<endl;
            }
    
    
        }
    }
    
    为了自己,和那些爱你的人
  • 相关阅读:
    JetBrains全家桶破解-Golang-Pycharm-IDEA等-不分平台
    k8s node update kernel
    k8s 图解
    k8s孤儿卷的问题
    k8s相关工作中常用命令
    AMQ死信引发宕机的问题
    StackStorm简介之actions
    DRF 使用入门
    python装饰器的简单实用
    type和object的关系
  • 原文地址:https://www.cnblogs.com/zhmlzhml/p/14325266.html
Copyright © 2011-2022 走看看