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

思路:虽说是放在栈的题库下面,但是也可以用别的做,这里用栈结合数组
光标可以看作下标,然后左右可以看作两个数组,并且用到了前缀和的知识
下面是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;
}
posted @   Time_Limit_Exceeded  阅读(108)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示