zoukankan      html  css  js  c++  java
  • 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;
    }
    

      

  • 相关阅读:
    Computer Vision: Algorithms and ApplicationsのImage processing
    LOJ6079「2017 山东一轮集训 Day7」养猫
    网络七层协议及其作用
    观察者模式深度剖析
    NIO 中的读和写
    NIO的通道和缓冲区
    NIO简介
    使用OutputStream向屏幕上输出内容
    对象的序列化
    PushBackInputStream回退流
  • 原文地址:https://www.cnblogs.com/ruanmowen/p/12726952.html
Copyright © 2011-2022 走看看