小明统计数组

题目描述

小明最近喜欢上数组统计,但是他遇到了一道难题,题目如下:

最初数列是空的,那么一共有下面五种操作:

  1. a x 表示向数列里面增加数值为x的数;

  2. d x 表示删除数列里面数值为x的数;

  3. I 表示删除数列里面数值最大的数;

  4. m 表示删除数列里面数值最小的数;

  5. q 询问当前数列的和。

保证添加的元素都不不一样,对于删除操作,如果数列里面不存在这个元素,则不进行删除操作。小明不会做这个题,希望寻求你的帮助,聪明的你可以帮助小明解决这个问题吗?

在处理输入的时候要特别注意!题目中操作 3 的操作字符是 大写的 i,而不是小写的 l。

输入格式

第一行输入两个数n,表示操作的数目;

之后n行,每行为题目中描述的五种操作。

输出格式

对于每个询问,输出当前数列的和。

样例

【样例输入】

复制代码
11
a 1
d 2
q
a 2
a 3
a 4
q
I
q
m
q

【样例输出】

复制代码
1
10
6
5
数据范围与提示
样例解释

a 1 增加1到数列里面

d 2 删除数列里面数值为2的元素,因为数列里面没有,所以不进行操作

q 询问,当前数列的和为1

a 2 增加2到数列里面

a 3 增加3到数列里面

a 4 增加4到数列里面

q 询问,当前数列的和为10

I 删除数列里面数值最大的元素,删除4

q 询问,当前数列的和为6

m 删除数列里面数值最小的元素,删除1

q 询问,当前数列的和为5

数据范围

1<=n<=100000

1<=x<=100000且x互不相同

一些想法

在最前面先定义一个关于 set 的迭代器 it,以便后面使用,循环输入字符,然后判断如果字符是'a',再输入一个数,在 set 中插入这个数。如果是'd',寻找 输入的数 如果不等于最后一个数的后面(就是如果这个数存在 set 中),删除这个数。如果等于 I,it 等于 --end(),就是等于最后一个数(正序排序后的最后一个数,也就是最大的数),如果 set 不为空,删除 it。如果等于'm',it等于第一个数(也就是最小的数),如果队列不为空,删除这个数。如果等于'q',用迭代器遍历 set,加上每一个数(set所有数之和),输出,换行。

AC代码

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	int n;
	cin>>n;
	set<int> s;
	set<int>::iterator it;
	for(int i=1;i<=n;i++){
		char a;
		cin>>a;
		if(a=='a'){
			int d;
			cin>>d;
			s.insert(d);
		}
		if(a=='d'){
			int d;
			cin>>d;
			if(s.find(d)!=s.end()) s.erase(d);
		}
		if(a=='I'){
			it=--s.end();
			if(!s.empty()) s.erase(it);
		}
		if(a=='m'){
			it=s.begin();
			if(!s.empty()) 	s.erase(it);
		}
		if(a=='q'){
			int sum=0;
			for(it=s.begin();it!=s.end();it++){
				sum+=*it;
			}
			cout<<sum<<endl;
		}
	}
	return 0;
}
相关推荐
王老师青少年编程8 分钟前
csp信奥赛C++高频考点专项训练之贪心算法 --【线性扫描贪心】:数列分段 Section I
c++·算法·编程·贪心·csp·信奥赛·线性扫描贪心
王老师青少年编程8 分钟前
csp信奥赛C++高频考点专项训练之贪心算法 --【线性扫描贪心】:分糖果
c++·算法·贪心算法·csp·信奥赛·线性扫描贪心·分糖果
自我意识的多元宇宙34 分钟前
二叉树遍历方式代码解读(2迭代)
数据结构
leaves falling44 分钟前
C++模板进阶
开发语言·c++
无敌昊哥战神1 小时前
【保姆级题解】力扣17. 电话号码的字母组合 (回溯算法经典入门) | Python/C/C++多语言详解
c语言·c++·python·算法·leetcode
脱氧核糖核酸__1 小时前
LeetCode热题100——238.除了自身以外数组的乘积(题目+题解+答案)
数据结构·c++·算法·leetcode
再卷也是菜1 小时前
算法提高篇(1)线段树(上)
数据结构·算法
ouliten1 小时前
C++笔记:std::invoke
c++·笔记
杨凯凡1 小时前
【012】图与最短路径:了解即可
java·数据结构
j_xxx404_2 小时前
C++算法:哈希表(简介|两数之和|判断是否互为字符重排)
数据结构·c++·算法·leetcode·蓝桥杯·力扣·散列表