送花(洛谷 2073)

题目背景

小明准备给小红送一束花,以表达他对小红的爱意。他在花店看中了一些花,准备用它们包成花束。

题目描述

这些花都很漂亮,每朵花有一个美丽值W,价格为C。

小明一开始有一个空的花束,他不断地向里面添加花。他有以下几种操作:

操作 含义

1 W C 添加一朵美丽值为W,价格为C的花。

3 小明觉得当前花束中最便宜的一朵花太廉价,不适合送给小红,所以删除最便宜的一朵花。

2 小明觉得当前花束中最贵的一朵花太贵,他心疼自己的钱,所以删除最贵的一朵花。

-1 完成添加与删除,开始包装花束

若删除操作时没有花,则跳过删除操作。

如果加入的花朵价格已经与花束中已有花朵价格重复,则这一朵花不能加入花束。

请你帮小明写一个程序,计算出开始包装花束时,花束中所有花的美丽值的总和,以及小明需要为花束付出的总价格。

输入输出格式

输入格式:

 

若干行,每行一个操作,以-1结束。

 

输出格式:

 

一行,两个空格隔开的正整数表示开始包装花束时,花束中所有花的美丽值的总和。以及小明需要为花束付出的总价格。

 

输入输出样例

输入样例#1:
1 1 1
1 2 5
2
1 3 3
3
1 5 2
-1
输出样例#1:
8 5

说明

对于20%数据,操作数<=100,1<=W,C<=1000。

对于全部数据,操作数<=100000,1<=W,C<=1000000。

分析:我们要维护当前队列的最小值和最大值,但一旦删除某个数字时,我们的最大最小值就无法维护,所以我们要使队列有序,但不断排序的话肯定会超时,所以用set优化。
代码:
#include<cstdio>
#include<iostream>
#include<set>
#define M 1000010
using namespace std;
set<int> q;
int bea[M],sum_m,sum_v;
int read()
{char c=getchar();int num=0,flag=1;while(c<'0'||c>'9'){if(c=='-')flag=-1;c=getchar();}while(c>='0'&&c<='9'){num=num*10+c-'0';c=getchar();}return num*flag;
}
int main()
{set<int>::iterator it;while(1){int f=read();if(f==-1)break;if(f==1){int mei=read(),val=read();if(bea[val])continue;else{bea[val]=mei;q.insert(val);sum_m+=mei;sum_v+=val;}}else if(f==2&&!q.empty()){it=q.end();it--;sum_m-=bea[*it];sum_v-=*it;q.erase(it);bea[*it]=0;}else if(!q.empty()){it=q.begin();sum_m-=bea[*it];sum_v-=*it;q.erase(it);bea[*it]=0;}}printf("%d %d",sum_m,sum_v);return 0;
}
View Code

 

转载于:https://www.cnblogs.com/harden/p/5797050.html

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

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

相关文章

神经网络的介绍

对于线性的定义&#xff1a;满足可加性和齐次性。

iOS 集成银联支付

转自&#xff1a;http://www.jianshu.com/p/92d615f78509 当初集成支付宝的时候 觉得见了这么丑的代码 加上这么难找的下载地址 在配上几乎为零的文档 寒哥就要吐血了下午去集成银联 才知道 血吐的早了 下载地址 https://open.unionpay.com/upload/download/Development_kit854…

pytorch入门使用

1、创建张量&#xff1a; 2、张量的方法和属性&#xff1a; (1) t1.item()只能用于张量中只有一个数据的情况下获取张量内的值 &#xff08;2&#xff09;numpy() 将tensor转换为numpy数组 t2 torch.tensor([[[1, 2]]]) print(t2) print(t2.numpy()) 输出结果&#xff1a;…

Python rang()函数

返回类型为迭代器 r range(11) print(r) 若输出r中的值&#xff0c;需要调用list(r) print(list(r)) 输出&#xff1a; 方法二: #二&#xff1a; r1 range(1,10) print(list(r1)) 方法三&#xff1a; #三&#xff1a; r2 range(1,10,2) print(list(r2)) 判断某一个数是…

Python 中的 while循环 和 for... in ...循环

for item in Python:print(item, end) print()for item in range(10):print(item, end)# 当不需要自定义变量时候&#xff0c;可以用”_“代替 for _ in range(5) :print(hello world)# 计算累加和 sum 0 for i in range(1,101) :if i%20 :sum i print(sum) While: a 0 while…

css笔记——css 实现自定义按钮

css实现自定义按钮的样式实际上很早就有了&#xff0c;只是会用的人不是很多&#xff0c;里面涉及到了最基础的css写法&#xff0c;在火狐中按钮还是会显示出来&#xff0c;这时需要将i标签的背景设置为白色&#xff0c;同时z-index设置比input高一些&#xff0c;这样才可以把按…

Hibernate中主键生成策略

主键生成策略 increment identity sequence native uuid assigned 1) increment 由hibernate完成 主键递增&#xff0c; 原理&#xff1a;select max(id) , insert时max(id)1 &#xff0c;完成主键递增 优点&#xff1a;跨数据库 缺点&#xff1a;多线程并发访问问题&#xff0…

Python四大金刚之一:列表

前言 列表中可以存储多个数据类型不同的对象 一个对象的内存空间&#xff1a; 因此一个列表的内存空间为: a 10 lst [hello , a , a ,world] print(lst) print(type(lst)) print(id(lst))print(lst[0] type: , type(lst[0])) 一、列表的创建&#xff1a; 内存示意图: #创建…

Python四大金刚之二:字典

引言 列表、字典&#xff1a;可变序列&#xff0c;可以执行增删改排序等 字典&#xff1a;无序的 一、字典的创建 #使用{}创建 scores {张三:100 ,李四:98 ,王麻子:72} print(scores) print(type(scores))#使用内置函数dict() student dict(name jack , age 16) print(st…

Java 加密 base64 encode

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 【前言】 计算机中的数据都是二进制的&#xff0c;不管是字符串还是文件&#xff0c;而加密后的也是二进制的&#xff0c; 而我们要看到的往往是字符串&#xff0c;本文就介绍了将byte[]转为各种进制…

Python四大金刚之三:元组

引言 一、元组的创建方式 #第一种: t (python,No.1) print(t) print(type(t)) #第二种: 内置函数tuple() t1 tuple((python,No.2)) print(t1) print(type(t1))注&#xff1a;当元组中只有一个元素时候&#xff0c;需要加 逗号&#xff01;&#xff01;&#xff01;&#xff…

Python四大金刚之四:集合

引言 一、集合的创建方式 #使用{} s {1,2,3,4,3,2} #不允许重复元素 print(s)#使用内置函数set() s set(range(6)) print(s) print(set(range(9))) print(set([10,12,13,4])) print(set(Python)) 二、集合的相关操作 set {10,20,30,40,50} print(10 in set) #新增操作 #add…