【HPU】神奇的操作 【vector +二分 】

来源:互联网 发布:造纸术的影响 知乎 编辑:程序博客网 时间:2024/06/06 01:01

提交: 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 longvector<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****************************************************************/
原创粉丝点击