郭大侠与线上游戏

来源:互联网 发布:微软io1.1淘宝 编辑:程序博客网 时间:2024/06/10 04:54

http://acm.uestc.edu.cn/#/problem/show/1339
本来想用线段树+数据离散化做,结果过不了,所以改用两个set容器,在要求的数分开保存。

#include<algorithm>#include <iostream>#include  <cstring>#include   <cstdio>#include    <queue>#include      <set>#define Max 100005using namespace std;queue<int>A;set<int>big;int op, key;set<int> s;void compare() {    if (s.size() < big.size() - 1 ) {        s.insert(*big.begin());        big.erase(*big.begin());    }    else if (s.size() > big.size()) {        big.insert(*s.rbegin());        s.erase(*s.rbegin());    }}int main() {    int N;    scanf("%d", &N);    while (N--) {        scanf("%d", &op);        switch (op) {        case 1:            scanf("%d", &key);            A.push(key);            if (big.empty() || key > *big.begin()) {                big.insert(key);            }else{                s.insert(key);            }            compare();            break;        case 2:            key = A.front();            A.pop();            if (key > *s.rbegin()) {                big.erase(big.find(key));            }            else{                s.erase(s.find(key));            }            compare();            break;        case 3:            printf("%d\n", *big.begin());        }    }    return 0;}
0 0
原创粉丝点击