<span>【牛客】数据结构-栈-Editor(自我学习用)</span>

思路:虽说是放在栈的题库下面,但是也可以用别的做,这里用栈结合数组
光标可以看作下标,然后左右可以看作两个数组,并且用到了前缀和的知识
下面是AC代码

#include <bits/stdc++.h>
using namespace std;
const int max_n=1000006;
int a[max_n],top_a;//top_a是光标的位置,top_b是光标后的东西
//a数组是光标及之前的数组,b数组是光标后的数组
long long sum[max_n],len[max_n];//前缀和
stack<int> sta;
void I(int x){
    a[++top_a]=x;
    sum[top_a]=sum[top_a-1]+x;//前缀和
    len[top_a]=max(sum[top_a],len[top_a-1]);//这里直接把Q操作需要的给做好了
}
void D(){
    if(top_a) top_a--;
}
void L(){
    if(top_a!=0) sta.push(a[top_a--]);
}
void R(){//由于光标右边数组不重要,故放栈里
    if(sta.empty()) return;//注意如果栈顶空还访问top是非法的
    int now=sta.top();
    sta.pop();
    a[++top_a]=now;
    sum[top_a]=sum[top_a-1]+now;
    len[top_a]=max(len[top_a-1],sum[top_a]);
}
void Q(int k){
    cout<<len[k]<<endl;
}
int main(){
    int n;
    len[0]=-1e9;
    while(cin>>n){
        while(n--){
            char c; cin>>c;
            if(c=='I'){
                int x; cin>>x;
                I(x);
            }else if(c=='D')D();
            else if(c=='L')L();
            else if(c=='R')R();
            else if(c=='Q'){
                int k; cin>>k;
                Q(k);
            }
        }
    }
    return 0;
}
全部评论

相关推荐

05-07 13:29
已编辑
门头沟学院 Java
北斗导航Compass低仿版:能不能先搞清楚优先级啊,怎么可能是项目问题,项目很重要吗?又没学历 又没实习大厂凭啥约面?那玩具项目 没应用在真实生产环境下的 就算做上天又有什么用?早点找个小公司实习 拿小公司实习去投大厂实习,这才是你现在该做的
投递美团等公司10个岗位 简历被挂麻了,求建议
点赞 评论 收藏
分享
04-25 19:29
已编辑
宁波大学 运营
被普调的六边形战士很高大:你我美牛孩
点赞 评论 收藏
分享
05-24 20:52
东南大学 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务