提交: 13 解决: 3 统计
题目描述
有Q次操作,分两类:
1 x —— 向集合(可能会有相同元素)里面插入元素x。
2 y —— 查询集合里面第y大的元素。
输入
第一行输入一个整数t,代表有t组测试数据(t <= 10)
每组数据第一行输出一个整数Q,代表操作次数。
保证:1 <= Q <= 100000,且所有元素均在int范围内。
输出
对出现的第二个操作输出一个整数,代表结果,如果集合里面元素个数小于y,输出-1。
样例输入
2
2
1 2
2 2
3
1 1
1 3
2 2
样例输出
-1
1
来源
Ocean
因为可能有重复元素,所以要用vector 不然就可以用set了
代码
#include<bits/stdc++.h>
using namespace std;
#define LL long long
vector<int>V;
vector<int>::iterator it;
int main(){
int t;cin>>t;
while(t--){
V.clear();
int q;cin>>q;
while(q--){
int a,b;
scanf("%d%d",&a,&b);
if(a==1){
if(V.empty()) V.push_back(b);
else {
it=lower_bound(V.begin(),V.end(),b);
if((it-V.begin())==V.size()) V.push_back(b);
else V.insert(it,b);
}
}else {
if(V.size()<b) puts("-1");
else printf("%d\n",V[V.size()-b]);
}
}
}
return 0;
}
/**************************************************************
Problem: 1400
User: 311609000717
Language: C++
Result: 正确
Time:524 ms
Memory:1820 kb
****************************************************************/