• AcWing 128. 编辑器


    算法

    栈+对顶栈

    思路

    在光标左右视作两个栈,向左左栈pop·······;

    代码

    #include <bits/stdc++.h>
    using namespace std;
    const int N=1e6+100;
    int t,x,sum[N],f[N],now;
    stack<int> a,b,c;
    int main()
    {
        while(scanf("%d
    ",&t)!=EOF)//之前在HDU提交,所以是多组数据
        {
            a=c;//STL特性,这里就是清空操作
            b=c;
            f[0]=-1e7;//初始化
            sum[0]=0;
            for(int i=1;i<=t;i++)
            {
                char ch=getchar();//读入
                if (ch=='I')//插入操作
                {
                    scanf(" %d",&x);
                    a.push(x);//将a插入栈中
                    sum[a.size()]=sum[a.size()-1]+a.top();//前1~a.size()-1的前缀和,加上这个一个新来的,构成1~a.size()
                    f[a.size()]=max(f[a.size()-1],sum[a.size()]);//看是之前的最大值大,还是新来的最大值大
                }
                if (ch=='D')
                    if (!a.empty())//只要栈不为空,就删除
                        a.pop();
                if (ch=='L')//左倾思想(博古+文化大革命)(手动滑稽)
                    if(!a.empty())//只要不为空
                        b.push(a.top()),a.pop();//a+b等于整个插入序列,b负责管理当前光标右边的序列.
                if (ch=='R')//右倾思想(陈独秀)(手动滑稽)
                {
                    if (!b.empty())//b不为空
                    {
                        a.push(b.top());//a负责管理1~当前光标.所以现在a往右了,那么必然是要加入b栈的开头,因为b栈管理当前光标的右边.
                        b.pop();
                        sum[a.size()]=sum[a.size()-1]+a.top();//同样的还是重新定义.
                        f[a.size()]=max(f[a.size()-1],sum[a.size()]);//见插入操作.
                    }
                }
                if (ch=='Q')
                {
                    scanf(" %d",&x);
                    printf("%d
    ",f[x]);//输出当前最大值区间.
                }
                getchar();//换行符读入
            }
        }
        return 0;
    }
    

      

  • 相关阅读:
    javase 超市库存系统
    Javase 简单代码练习
    Javase 简单练习
    SQL表连接查询
    SQL多表查询
    SQL表查询
    SQL数据查询2
    SQL数据查询
    SQL增删改
    AutoCompleteTextView的使用
  • 原文地址:https://www.cnblogs.com/ruanmowen/p/12726952.html
Copyright © 2020-2023  润新知