数列操作1——栈+前缀和,典型例题,值得一看

news2025/6/21 15:12:37

题目描述

先给定一个长度为n数列,再给定m个操作,现在需要维护五个操作:

1 x:在光标的前面插入一个数字x。

2:删除光标前的最后一个数字,如果光标前没有数字则忽略。

3:左移一格光标,如果光标已经在最左边则忽略。

4:右移一格光标,如果光标已经在最右边则忽略。

5 k:求前k个数的前缀和,保证k<=数列长度。

初始时光标在数列的最后一个数后面

输入格式

第一行一个正整数n表示数列长度。

第二行n个整数表示这个序列。

第三行一个正整数m表示操作数。

后面m行每行一个或两个数,参照【问题描述】。

输出格式

对于每个询问,输出一个答案,每个答案占一行

样例 #1

样例输入 #1

2
3 2
5
3
1 6
4
2
5 2

样例输出 #1

9

提示

数据范围:n,m,k<=100000,x<=int

思路

这道题不同于其他的地方的是,他的操作是在光标前,我们又知道,栈只能操纵栈顶(使用指针的方式除外),所以这个地方就要用两个栈来存储,具体的看我秀操作

ACcode

#include <bits/stdc++.h>
using namespace std;

long long cmp1,cmp2,a[200010],b[200010];
int cnt1,cnt2;
stack<int> q1,q2;
int main(){
	int n,m;
	cin>>n;
	for (int i=0;i<n;i++){
		cin>>cmp1;
		q1.push(cmp1);
		cnt1++;
		a[cnt1]=a[cnt1-1]+cmp1;
	}
	
	//
	
	cin>>m;
	for (int i=0;i<m;i++){
		cin>>cmp1;
		
		if (cmp1==1){
			cin>>cmp2;
			q1.push(cmp2);
			cnt1++;
			a[cnt1]=a[cnt1-1]+cmp2; 
		}else if (cmp1==2&&cnt1>=1){
			q1.pop();
			cnt1--;
		}else if (cmp1==3&&cnt1>=1){
			q2.push(q1.top());
			cnt2++;
			b[cnt2]=b[cnt2-1]+q1.top();
			//
			cnt1--;
			q1.pop();
		}else if (cmp1==4&&cnt2>=1){
			q1.push(q2.top());
			cnt1++;
			a[cnt1]=a[cnt1-1]+q2.top();
			//
			cnt2--;
			q2.pop();
		}else if (cmp1==5){
			cin>>cmp2;
			if (cmp2<=cnt1)cout<<a[cmp2]<<endl;
			else {
				cout<<a[cnt1]+b[cnt2]-b[cnt2-cmp2+cnt1]<<endl;
			}
		}
	}
	return 0;
}

感谢王大佬提供思路

 看了这么久,作者也写了这么久,能不能点一个赞,在收藏一下呢?最好的话在点个关注吧

谢谢啦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1503242.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python】7. 基础语法(5) -- 文件+库+习题篇

文件 文件是什么 变量是把数据保存到内存中. 如果程序重启/主机重启, 内存中的数据就会丢失. 要想能让数据被持久化存储, 就可以把数据存储到硬盘中. 也就是在 文件 中保存 在 Windows “此电脑” 中, 看到的内容都是 文件. 文件夹(目录)也是一种特殊的文件->目录文件 通过…

关于装载类子系统

装载类子系统 类加载器字节码调节器类加载运行时数据区 类加载器 将class文件加载进jvm的方法去&#xff0c;并在方法去中创建一个java.lang.Class对象作为外界访问这个类的接口。实现这个动作的代码模块称为类加载器。 类加载器分类 启动类加载器&#xff08;Bootstrap C…

qt带后缀单位的QLineEdit

QLineEditUnit.h #pragma once #include <QLineEdit> #include <QPushButton>class QLineEditUnit : public QLineEdit {Q_OBJECT public:QLineEditUnit(QWidget* parent Q_NULLPTR);~QLineEditUnit();//获取编辑框单位QString UnitText()const;//设置编辑框单位…

ubuntu自带屏幕截图功能

目录 简介开始截屏步骤1.打开截屏软件2.选择区域3.截图 快捷键 录屏方法11.开始录屏2.停止录屏 方法2 补充说明 简介 试了好多开源跨平台截图软件&#xff0c;但是在ubuntu上都或多或少存在问题。ubuntu有自带的截图软件。打算把ubuntu自带的截图软件用起来。 顺便说一下我使…

JavaScript数组方法常用方法大全

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1. push()2. pop()3. unshift()4. shift()5. isArray()6. map()7. filter()8. every()9. some()10. splice()11. slice()12. indexOf()13. includes()14. concat()1…

Vue+SpringBoot打造木马文件检测系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 木马分类模块2.3 木马软件模块2.4 安全资讯模块2.5 脆弱点模块2.6 软件检测模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 木马分类表3.2.2 木马软件表3.2.3 资讯表3.2.4 脆弱点表3.2.5 软件检测表…

【Python】新手入门:变量的作用域是什么?有哪几种作用域?作用域的查找顺序是什么?

【Python】新手入门&#xff1a;变量的作用域是什么&#xff1f;有哪几种作用域&#xff1f;作用域的查找顺序是什么&#xff1f; &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基…

Django添加app

Django添加App python manage.py startapp [app_name]快速上手 注册app&#xff0c;setting.py 编写url和视图的对应关系 添加视图函数 命令行启动 python manage.py runserver页面模板

循序渐进丨MogDB 数据库新特性之SQL PATCH绑定执行计划

1 SQL PATCH 熟悉 Oracle 的DBA都知道&#xff0c;生产系统出现性能问题时&#xff0c;往往是SQL走错了执行计划&#xff0c;紧急情况下&#xff0c;无法及时修改应用代码&#xff0c;DBA可以采用多种方式针对于某类SQL进行执行计划绑定&#xff0c;比如SQL Profile、SPM、SQL …

详解前端登录流程:实现原理与最佳实践

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

考研复习C语言初阶(3)

目录 一.函数是什么? 二.C语言中函数的分类 2.1库函数 2.2自定义函数 三.函数的参数 3.1实际参数&#xff08;实参&#xff09; 3.2 形式参数&#xff08;形参&#xff09; 四.函数的调用 4.1 传值调用 4.2 传址调用 五. 函数的嵌套调用和链式访问 5.1 嵌套调用 5…

使用Python编写简单学生管理系统

学完python基础&#xff0c;把学过的知识运用起来做一个简单的学生管理系统 1、需求分析 需求&#xff1a;进入系统显示系统功能界面&#xff0c;功能如下&#xff1a; ① 添加学员信息 ② 删除学员信息 ③ 修改学员信息 ④ 查询学员信息(只查询某个学员) ⑤ 遍历所有学…

专家院士共同参编的《数字空间共同体白皮书》正式启动

数字产业化、产业数字化&#xff0c;促进数字技术和实体经济深度融合&#xff0c;成为数字经济高质量发展的重要路径。数字空间与物理空间双向融合&#xff0c;用数字技术提升企业有限资源的有效配置&#xff0c;构建经济双空间增长模式&#xff0c;是形成企业新质生产力的关键…

JVM基本概念、命令、参数、GC日志总结

原文: 赵侠客 一、前言 NPE&#xff08;NullPointerException&#xff09;和OOM&#xff08;OutofMemoryError&#xff09;在JAVA程序员中扮演着重要的角色&#xff0c;它也是很多人始终摆脱不掉的梦魇&#xff0c;与NPE不同的是OOM一旦在生产环境中出现就意味着只靠代码已经无…

鸿蒙App语法/结构/注意

注意 默认情况下&#xff0c;应用只能访问有限的系统资源。其他资源权限处理https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/accesstoken-overview-0000001544703857-V3 .1、权限申请使用流程 https://developer.harmonyos.com/cn/docs/documentatio…

【REST2SQL】12 REST2SQL增加Token生成和验证

【REST2SQL】01RDB关系型数据库REST初设计 【REST2SQL】02 GO连接Oracle数据库 【REST2SQL】03 GO读取JSON文件 【REST2SQL】04 REST2SQL第一版Oracle版实现 【REST2SQL】05 GO 操作 达梦 数据库 【REST2SQL】06 GO 跨包接口重构代码 【REST2SQL】07 GO 操作 Mysql 数据库 【RE…

poetry库:依赖管理和打包工具

这个工具是在群里看见别人说好用的&#xff0c;所以了解一下。 1.poetry初始 官网&#xff1a;https://python-poetry.org/ 项目仓库&#xff1a;https://github.com/python-poetry 或 https://github.com/python-poetry/poetry 教程&#xff1a;https://python-poetry.org/…

Day01-项目介绍及初始化-登录页面(test)

1.人力资源项目介绍 1.1 项目架构和解决方案 1.2 课程安排 1.3 课程具备能力 1.4 课程地址 vue-element-admin文档地址&#xff1a;链接演示地址&#xff1a; 链接人力资源项目演示地址&#xff1a; 链接 2. 拉取项目基础代码 拉取命令 $ git clone https://github.com/P…

河北专升本(C语言编程题)

一&#xff1a;基础算法原理 1. 冒泡排序 原理&#xff1a;从左到右&#xff0c;相邻元素进行比较。每次比较一轮&#xff0c;就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。 以从小到大排序为例&#xff0c;第一轮比较后&#xff0c;所有数中最大的…

【设计】基于web的会员管理系统

1、引言 设计结课作业,课程设计无处下手&#xff0c;网页要求的总数量太多&#xff1f;没有合适的模板&#xff1f;数据库&#xff0c;java&#xff0c;python&#xff0c;vue&#xff0c;html作业复杂工程量过大&#xff1f;毕设毫无头绪等等一系列问题。你想要解决的问题&am…