您当前的位置: 首页 >  编辑器

*DDL_GzmBlog

暂无认证

  • 4浏览

    0关注

    605博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

0x10 02 编辑器 双栈模拟

*DDL_GzmBlog 发布时间:2021-10-24 22:31:58 ,浏览量:4

前言

用栈模拟的一道题 传送门 :

思路

我们可以利用两个栈来进行模拟 光标左右两边

同时我们记录 左边的 最大 M A X N MAXN MAXN 和 S U M SUM SUM

如果是移动光标的操作的话,无非就是将一个栈的栈顶元素

移动到另一个栈罢了

CODE
#include 
using namespace std;
#define ll long long
#define endl '\n'
const int N  = 1e6+10;
stack l,r;
int sum[N],maxn[N];

void solve()
{
    int n;cin>>n;
    memset(maxn,-0x3f,sizeof maxn);
    int top = 0 ;

    for(int i=1;i>op;
        int x;

        if(*op == 'I')
        {
            cin>>x;
            l.push(x); ///相当于插在左边
            top++;
            sum[top] = x  + sum[top - 1];
            maxn[top] =  max(sum[top],maxn[top-1]);
        }

        if(*op == 'D' && !l.empty())
        {l.pop();
        top--;
        }

        if(*op =='L'&&!l.empty())
        {
            r.push(l.top());
            l.pop();
            top--;
        }

        if(*op == 'R' && !r.empty())
        {
            l.push(r.top());
            r.pop();
            top++;
            sum[top] = l.top() + sum[top-1];
            maxn[top] =max(maxn[top-1],sum[top]);
        }

        if(*op =='Q')
        {
            cin>>x;
            cout            
关注
打赏
1657615554
查看更多评论
0.0510s