你正在为编程竞赛设计题目,但被告知题目要么太难,要么太容易。幸运的是,你已经有了 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;
}