您的位置:首页 > 理论基础 > 数据结构算法

CDOJ1339 郭大侠与线上游戏

2016-08-04 21:02 218 查看
附网址: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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构