内蒙古大学IMCPC 2019 复现 问题 O: 自闭

题目描述
世界上的大佬太多了,菜鸡们纷纷自闭并来到心理诊所寻求治疗,心理诊所 的每一个医生有不同的开始上班时间,能力 a 和收费 c,能力为 a 的医生可以治 好自闭程度小于或等于 a 的菜鸡。菜鸡们都很穷,所以他们只想要能治好他们 的最便宜的医生,请你告诉他们当前能治好他们病的最便宜的医生的价格。(假 设治疗在瞬间完成,同一个医生可以连续接待任意个客人)
输入
第一行一个正整数 T(T<=5),表示数据的组数

每组数据第一行一个正整数 n(n <= 10^5),表示接下来有 n 行。

接下来 n 行中,若第一个数为 0,则接下来两个正整数 a,c 表示有一个能力 为 a,收费为 c 的医生上班了。若第一个数为 1,则接下来有一个正整数 b,表 示有一个自闭程度为 b 的菜鸡来寻求治疗(1<=a,b,c <= 10^9
输出
对每个寻求治疗的菜鸡,输出一个整数表示治疗需要的花费,如果没有医生 能治好他,输出“-1”。
样例输入
1
8
1 19
0 17 5
0 1 6
1 12
1 15
0 5 7
0 3 9
1 3
样例输出
-1
5
5
5
知识点

  • STL平衡二叉树(用模板就好)
  • 自动排序容器:multiset

multiset

  • mulitiset<> st //声明multiset类型的容器 st <>中存放数据类型
  • st.insert//插入元素
  • st.find//寻找元素
  • st.erase//删除元素
    复杂度都是log(n)

multiset中的自定义排序规则

模板

struct ru{
	bool operator()(const DO &a,const DO &b)const
	{
	return a.c<b.c;
	}
};

总代码

#include<iostream>
#include<cstring>
#include<set>//头文件
using namespace std;
struct DO{
	int a,c;
};
//排序规则
struct ru{
	bool operator()(const DO &a,const DO &b)const
	{
	return a.c<b.c;
	}
};

int main()
{
	multiset<struct DO,ru> l;//声明multiset类型DO 排序规则ru
	bool istrue=false;//判断是否能医治好,一开始未不能
	DO p;
	int T,n,k,b;
	cin>>T;
	while(T--)
	{
		cin>>n;
		multiset<struct DO,ru> l;
		while(n--)
		{
			cin>>k;
			if(k==0)
			{
				cin>>p.a>>p.c;
				l.insert(p);
			}
			if(k==1)
			{
				cin>>b;
				multiset<struct DO,ru>::iterator op;//迭代器(相当于指针)
				for(op=l.begin();op!=l.end();op++)
				{
					if(b<=op->a) 
					{
						cout<<op->c<<endl;
						istrue=true;
						break;
					}
				}
				if(!istrue) cout<<"-1"<<endl;
				istrue=false;
			}
			
		}
		l.clear();//很关键清空l容器的存储
	}
	return 0;
} 

如有错误,可以私信哦,共同进步!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值