招生(vector,有序插入insert),遍历

招生

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
#include <vector>
#include <stack>
#include <map>
#include <set>
#include <queue>
#include <list>
#include <cstdlib>
#include <iterator>
#include <cmath>
#include <iomanip>
#include <bitset>
#include <cctype>

using namespace std;
#define cin_1(a) scanf("%d",&a)
#define cin_2(a,b) scanf("%d%d",&a,&b)
#define cin_3(a,b,c) scanf("%d%d%d",&a,&b,&c)
#define max_3(a,b,c) max(max(a,b),c)
#define ll long long
#define rint register int
#define mem0(x) memset(x, 0, sizeof(x))
#define mem1(x) memset(x, -1, sizeof(x))
/**
vector<int>::iterator it;
for(it=vec.begin();it!=vec.end();it++)
    cout<<*it<<endl;
*/
///2147483647 -2147483648
///9223372036854775807 -9223372036854775808
const int inf = 0x3f3f3f3f;
const ll inff = 0x3f3f3f3f3f3f3f3f;

//map<ll,ll>mp;
//set<ll>st;
vector<int>a;
/***********************************************/
///http://oj.acm.zstu.edu.cn/JudgeOnline/problem.php?id=4405
///招生
int main() {
    int n;
    cin>>n;
    int cnt=0;
    while(n--)
    {
        int opt,x;
        cin>>opt>>x;
        if(opt==1)
        {
            cnt++;///插入第一个比x大的位置前面(升序)
            a.insert(lower_bound(a.begin(),a.end(),x),x);//<-<-
        }
        else if(opt==2)
        {
            cnt--;
            a.erase(lower_bound(a.begin(),a.end(),x));//<-<-
        }
        else if(opt==3)
        {
            if(cnt-x>=0)
            {
                int p=cnt-x;
                ///输出第p个成绩
                cout<<a[p]<<endl;
            }
        }
        else
        {
            ///总数减去小于x的人数,即为被录取的人数
            cout<<cnt-(lower_bound(a.begin(),a.end(),x)-a.begin())<<endl;//<-<-
        }
    }
    return 0;
}

 

posted @ 2019-01-20 18:30  liuyongliu  阅读(286)  评论(0编辑  收藏  举报