P3871 [TJOI2010]中位数

一眼秒掉,这不是splay水题吗,套模板

#include<bits/stdc++.h>

#define IL inline
#define N 150005
using namespace std; int ch[N][],siz[N],val[N],cnt[N],f[N],root,ncnt; IL void pushup(int k) {
siz[k]=siz[ch[k][]]+siz[ch[k][]]+cnt[k];
} IL int chk(int x) {
return ch[f[x]][]==x;
} IL void rotate(int x) {
int y=f[x],z=f[y],k=chk(x),w=ch[x][k^];
ch[y][k]=w,f[w]=y;
ch[z][chk(y)]=x,f[x]=z;
ch[x][k^]=y,f[y]=x;
pushup(y),pushup(x);
} IL void splay(int x,int goal=) {
while(f[x]!=goal) {
int y=f[x],z=f[y];
if(z!=goal) {
if(chk(x)==chk(y)) rotate(y);
else rotate(x);
}
rotate(x);
}
if(!goal) root=x;
} IL void insert(int x) {
int cur=root,p=;
while(cur&&x!=val[cur]) {
p=cur;
cur=ch[cur][x>val[cur]];
}
if(cur) {
cnt[cur]++;
} else {
cur=++ncnt;
if(p) ch[p][x>val[p]]=ncnt;
f[cur]=p,siz[cur]=cnt[cur]=;
ch[cur][]=ch[cur][]=;
val[cur]=x;
}
splay(cur);
} IL int kth(int k)
{
int cur=root;
while(){
if(ch[cur][]&&k<=siz[ch[cur][]]){
cur=ch[cur][];
}else if(k>siz[ch[cur][]]+cnt[cur]){
k-=siz[ch[cur][]]+cnt[cur];
cur=ch[cur][];
}else return cur;
}
} int n,m; int main() {
scanf("%d",&n);
for(int x,i=; i<=n; i++) {
scanf("%d",&x);
insert(x);
}
scanf("%d",&m);
char opt[];
for(int x,i=; i<=m; i++) {
scanf("%s",opt);
if(opt[]=='a') scanf("%d",&x),insert(x),++n;
else printf("%d\n",val[kth(n/+(n%))]);
} return ;
}

入门题

开两个堆维护,大根堆维护小的中的最大值,小根堆维护打的中的最小值

#include<iostream>
#include<cstdio>
#include<cmath>
#include<queue> #define IL inline
#define N 150005
using namespace std; int n,m; priority_queue<int,vector<int> >q_1;//大根堆维护小值
priority_queue<int,vector<int>,greater<int> >q_2;//小根堆维护大值 void cz() {
while() {
int a=q_1.size(),b=q_2.size();
if(abs(a-b)<=) break;
if(q_1.size()>q_2.size()) q_2.push(q_1.top()),q_1.pop();
else q_1.push(q_2.top()),q_2.pop();
}
} int main() {
scanf("%d",&n);
for(int x,i=; i<=n; i++) {
scanf("%d",&x);
if(i==) q_1.push(x);
else {
if(x>q_1.top()) q_2.push(x);
else q_1.push(x);
cz();
}
}
scanf("%d",&m);
char opt[];
for(int x,i=; i<=m; i++) {
scanf("%s",opt);
if(opt[]=='a'){
scanf("%d",&x);
if(x>q_1.top()) q_2.push(x);
else q_1.push(x);
cz();
}
else {
if(q_1.size()!=q_2.size()) q_1.size()>q_2.size()?printf("%d\n",q_1.top()):printf("%d\n",q_2.top());
else printf("%d\n",min(q_2.top(),q_1.top()));
}
} return ;
}

洛谷——P3871 [TJOI2010]中位数的更多相关文章

  1. 洛谷 P3871 [TJOI2010]中位数 解题报告

    P3871 [TJOI2010]中位数 题目描述 给定一个由N个元素组成的整数序列,现在有两种操作: 1 add a 在该序列的最后添加一个整数a,组成长度为N + 1的整数序列 2 mid 输出当前 ...

  2. 洛谷P3871 [TJOI2010]中位数(splay)

    题目描述 给定一个由N个元素组成的整数序列,现在有两种操作: 1 add a 在该序列的最后添加一个整数a,组成长度为N + 1的整数序列 2 mid 输出当前序列的中位数 中位数是指将一个序列按照从 ...

  3. 洛谷 3871 [TJOI2010]中位数

    [题解] 平衡树模板题,不过因为可以离线,所以有别的做法.把询问倒着做,变成删掉数字.求中位数,于是可以二分+树状数组. #include<cstdio> #include<cstr ...

  4. 洛谷3871 [TJOI2010]中位数 维护队列的中位数

    题目描述 给定一个由N个元素组成的整数序列,现在有两种操作: 1 add a 在该序列的最后添加一个整数a,组成长度为N + 1的整数序列 2 mid 输出当前序列的中位数 中位数是指将一个序列按照从 ...

  5. 洛谷 P3871 中位数

    ->题目链接 题解: 暴力 经鉴定,此题数据水到没朋友. #include<algorithm> #include<iostream> #include<cstdi ...

  6. 洛谷 P1627 [CQOI2009]中位数 解题报告

    P1627 [CQOI2009]中位数 题目描述 给出1~n的一个排列,统计该排列有多少个长度为奇数的连续子序列的中位数是b.中位数是指把所有元素从小到大排列后,位于中间的数. 输入输出格式 输入格式 ...

  7. 洛谷——P1627 [CQOI2009]中位数

    P1627 [CQOI2009]中位数 给出1~n的一个排列,统计该排列有多少个长度为奇数的连续子序列的中位数是b.中位数是指把所有元素从小到大排列后,位于中间的数. 中位数的题目有关统计的话,可以转 ...

  8. [LUOGU] P3871 [TJOI2010]中位数

    题目描述 给定一个由N个元素组成的整数序列,现在有两种操作: 1 add a 在该序列的最后添加一个整数a,组成长度为N + 1的整数序列 2 mid 输出当前序列的中位数 中位数是指将一个序列按照从 ...

  9. 洛谷 P3879 [TJOI2010]阅读理解

    P3879 [TJOI2010]阅读理解 题目描述 英语老师留了N篇阅读理解作业,但是每篇英文短文都有很多生词需要查字典,为了节约时间,现在要做个统计,算一算某些生词都在哪几篇短文中出现过. 输入输出 ...

随机推荐

  1. 8-2 canvas专题-线条样式

    8-2 canvas专题-线条样式 学习要点 对第五章知识进行简单的回顾和总结 进一步讲解canvas绘图相关的知识点 第八章内容介绍 在第八章中我们将对以前的知识进行简单的回顾,着重对canvas绘 ...

  2. 【Codevs1080】质数环

    http://codevs.cn/problem/1031/ 不讲什么,预处理素数+搜索 // <C.cpp> - Sun Oct 9 12:58:23 2016 // This file ...

  3. hdoj--2186--悼念512汶川大地震遇难同胞——一定要记住我爱你(模拟水题)

     悼念512汶川大地震遇难同胞--一定要记住我爱你 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (J ...

  4. Python: PS 滤镜--万花筒效果

    本文用 Python 实现 PS 的一种滤镜效果,称为万花筒.也是对图像做各种扭曲变换,最后图像呈现的效果就像从万花筒中看到的一样: 图像的效果可以参考之前的博客: http://blog.csdn. ...

  5. Java 泛型 四 基本用法与类型擦除

    简介 Java 在 1.5 引入了泛型机制,泛型本质是参数化类型,也就是说变量的类型是一个参数,在使用时再指定为具体类型.泛型可以用于类.接口.方法,通过使用泛型可以使代码更简单.安全.然而 Java ...

  6. nginx开发(二)配置mp4文件在线播放

    1: 第一步先开打nginx的文件夹遍历功能 vi /usr/local/nginx/conf/nginx.conf #编辑配置文件,在http {下面添加以下内容: autoindex on; #开 ...

  7. 【高德地图API】SDK v1.1.1 在代码中设置Map中心点Center级别不起作用

    有时候你在初始化地图时不是直接在xaml中设置Map的Center,而是在cs代码中设置Center或者设置SetZoomAndCenter改变中心点和缩放级别.你可能会发现,不起作用. 这边提出的解 ...

  8. EJB是什么?EJB的概念分析与理解(copy)

    [说明:转载于http://blog.csdn.net/jojo52013145/article/details/5783677] 1. 我们不禁要问,什么是"服务集群"?什么是& ...

  9. 堆排序的C实现

    这几天有点抵触情绪,看过了快速排序还有一些别的东西,但是一点都不想写有点复杂的代码0 0拖到了今天终于写了前几天就应该自己写一下的堆排序,完全用C语言写的,下面把代码贴一下.很多地方写得并不好,不过已 ...

  10. Akka源码分析-Cluster-ClusterClient

    ClusterClient可以与某个集群通信,而本身节点不必是集群的一部分.它只需要知道一个或多个节点的位置作为联系节点.它会跟ClusterReceptionist 建立连接,来跟集群中的特定节点发 ...