功能强大编辑器

时间限制:1秒 内存限制:128M

题目描述

你要帮助小可创造一个超级数字编辑器!编辑器依旧运行在Linux下,因此你只能通过指令去操控他。指令有五种:
In X 表示在光标左侧插入一个数字
Del 表示删除光标左侧一个数字
Left 表示光标向左移动一下
Right 表示光标向右移动一下
Ask k 表示光标之前的序列为a_1,a_2,a_3a​1​​,a​2​​,a​3​​...a_ka​k​​,输出max_{1\leq i \leq k}S_imax​1≤i≤k​​S​i​​,其中S_i=a_1+a_2+..+a_iS​i​​=a​1​​+a​2​​+..+a​i​​

输入描述

输入第一行包含一个整数Q,表示指令数量。

然后输入Q行,表示Q个指令。

输出描述

对于每个Ask k均输出一行,表示询问结果。

输入样例

  1. 8
  2. In 2
  3. In -1
  4. In 1
  5. Ask 3
  6. Left
  7. Del
  8. Right
  9. Ask 2

输出样例

  1. 2
  2. 3

数据范围

50%的数据,Q不超过1000.

100%的数据,Q不超过1000000,且x不超过1000

参考代码如下

cpp 复制代码
#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
const int N=1e6+5;
stack<int> a,b;
int n,x,sum[N],mx[N];
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin>>n;
	memset(mx,-0x3f,sizeof mx);
	while(n--){
		string s;
		cin>>s;
		if(s=="In"){
			cin>>x;
			a.push(x);
			int t=a.size();
			sum[t]=sum[t-1]+x;
			mx[t]=max(mx[t-1],sum[t]);
		}
		if(s=="Del"&&!a.empty()) a.pop();
		if(s=="Left"&&!a.empty()){
			b.push(a.top()); 
			a.pop();
		}
		if(s=="Right"&&!b.empty()){
			x=b.top();
			a.push(x);
			b.pop();
			int t=a.size();
			sum[t]=sum[t-1]+x;
			mx[t]=max(mx[t-1],sum[t]);
		}
		if(s=="Ask"){
			cin>>x;
			cout<<mx[x]<<endl;
		}
	}
	return 0;
} 
相关推荐
claider34 分钟前
Vim User Manual 阅读笔记 User_03.txt move around
笔记·编辑器·vim
啊湘2 小时前
VSCODE英文界面切换为中文(适用CURSOR等使用)
ide·vscode·编辑器·bug·cursor
wincheshe5 小时前
React Native inspector 点击组件跳转编辑器技术详解
react native·react.js·编辑器
微醺的老虎1 天前
【工具】vscode格式化json文件
ide·vscode·编辑器
乔宕一1 天前
vscode 设置每次调试 powershell 脚本都使用临时的 powershell 终端
ide·vscode·编辑器
山峰哥1 天前
数据库工程与SQL调优实战:从原理到案例的深度解析
java·数据库·sql·oracle·性能优化·编辑器
m0_466607701 天前
IAR Embedded Workbench (EWARM) 项目中的关键文件
编辑器
阴暗扭曲实习生1 天前
135编辑器字符效果:上标数字与特殊字体实现步骤
编辑器
猫头虎2 天前
Claude Code 永动机:ralph-loop 无限循环迭代插件详解(安装 / 原理 / 最佳实践 / 避坑)
ide·人工智能·langchain·开源·编辑器·aigc·编程技术
爱吃汽的小橘2 天前
ZYNQ入门指南:ARM+FPGA开发全解析
编辑器