附网址:http://acm.uestc.edu.cn/#/problem/show/1339
这道题,我觉得完全就是暴力打的吧,考虑了多种情况而已,大概这几种情况吧
1.N为奇数 插入/弹出的数在之前,那么中位数的pos--;反之,插入/弹出的数在之后,pos不变。
2.N为偶数 插入/弹出的数在之后,那么中位数的pos++;反之,插入/弹出的数在之后,pos不变;
3.弹出时,若弹出中位数,如果N为偶数,pos++;反之N为奇数,pos--;
就这么几个注意的吧
下方代码
//by liucxy
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<queue>
#include<set>
using namespace std;queue<int>q;
set<int>sum;
int N;
set<int>::iterator it,tit;int main()
{scanf("%d",&N);while(N--){int x;scanf("%d",&x);if (x==1){int a;scanf("%d",&a);q.push(a);sum.insert(a);if (sum.size()==1) it=sum.begin();if (*it < a && sum.size()%2==0) it++;if (*it > a && sum.size()%2!=0) it--; }if (x==2){tit=sum.find(q.front());q.pop();if (*it < *tit && sum.size()%2==0) it--;if (*it > *tit && sum.size()%2!=0) it++;if (*it == *tit && sum.size()%2==0) it--;if (*it == *tit && sum.size()%2!=0) it++;sum.erase(tit);}if (x==3){if (sum.size()==1) it=sum.begin();printf("%d\n",*it);}}return 0;
}
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态