【CDOJ 1339】郭大侠与线上游戏

来源:互联网 发布:二本 考研 清华 知乎 编辑:程序博客网 时间:2024/06/10 03:44

http://acm.uestc.edu.cn/#/problem/show/1339

#include<cstdio>#include<iostream>#include<cmath>#include<algorithm>#include<cstring>#include<set>#include<queue>using namespace std;int n;set<int> l,r;queue<int> q;int main(){    scanf("%d",&n);    int op = 0,val;    while(n--)    {        scanf("%d",&op);        switch(op)        {            case 1:                scanf("%d",&val);                q.push(val);                if(r.empty()){r.insert(val);}                else if(l.empty())                {                    if(val>*r.begin())                    {                        l.insert(*r.begin());                        r.erase(r.begin());                        r.insert(val);                    }                    else l.insert(val);                }                else                {                    if(val>=*r.begin())                    {                        if(r.size()==l.size())r.insert(val);                        else                        {                            r.insert(val);                            l.insert(*r.begin());                            r.erase(r.begin());                        }                    }                    else                    {                        if(r.size()==l.size())                        {                            l.insert(val);                            r.insert(*l.rbegin());                            l.erase(--l.end());                        }                        else l.insert(val);                    }                }                break;            case 2:                val = q.front();                q.pop();                if(l.empty())r.erase(r.begin());                else                {                    if(val>=*r.begin()){                        if(r.size()==l.size()){                            r.erase(r.lower_bound(val));                            r.insert(*l.rbegin());                            l.erase(--l.end());                        }                        else{                            r.erase(r.lower_bound(val));                        }                    }                    else                    {                        if(r.size()==l.size()){                            l.erase(l.lower_bound(val));                        }                        else                        {                            l.erase(l.lower_bound(val));                            l.insert(*r.begin());                            r.erase(r.begin());                        }                    }                }                break;            case 3:                printf("%d\n",*r.begin());                break;        }    }    return 0;}
1 0
原创粉丝点击