跪求大佬帮助(悬棺)
  • 板块灌水区
  • 楼主WWhz11
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/12/31 22:47
  • 上次更新2025/1/1 00:10:08
查看原帖
跪求大佬帮助(悬棺)
1456568
WWhz11楼主2024/12/31 22:47

你正在为编程竞赛设计题目,但被告知题目要么太难,要么太容易。幸运的是,你已经有了 n 道题,为了确定合适的题目,你将根据题目的难易程度进行筛选。 在构思出难度各异的题目后,你将舍弃以下两种题目之一 q 次:

1 x :舍弃一道严格比给定难度 x 更难的最简单题目。

2 x :舍弃一道不比给定难度 x 更难的最难题目。

第一行包含两个整数 n,m (1≤n,m≤10 ^5 ),依次代表问题的数量和筛选次数。

第二行包含 n个整数 Di(1≤Di≤10 ^9),表示的 n个问题的难度。

接下来 q 行,每行包含两个整数 op,x(1<=x<=10^9) 如果op=1,表示丢弃难度严格大于 x 的最简单题目,如果op=2,表示丢弃难度不大于 x 的最难题目

跪求代码的问题

#include<bits/stdc++.h>
using namespace std;
multiset<int>st;
int n,m,a,b;
set<int>::iterator it;
int main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a;
		st.insert(a);
	}
	while(m--){
		cin>>a>>b;
		if(a==1){
			bool f=false;
			for(it=st.begin();it!=st.end();it++){
        		if(*it>b){
					cout<<*it<<"\n";
					st.erase(it);
					f=true;
					break;
				}
    		}
    		if(!f)cout<<"-1\n";
		}else{
			bool f=false;
			for (it=st.begin();it!=st.end();it++){
				if(*it==b){
					it--;
					cout<<*it<<"\n";
					st.erase(it);
					f=true;
					break;
				}
    		}
    		if(!f)cout<<"-1\n";
		}
	}
	return 0;
}
2024/12/31 22:47
加载中...