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. Estimating duration from bitrate, this may be inaccurate

    通过 ffmpeg  获取 媒体 播放时长 ./ffmpeg-linux64-v3.3.1 -i /tmp/mp30001.mp3 ffmpeg version N-86111-ga441aa90e8 ...

  2. forceStopPackage与killBackgroundProcesses方法

    最近了解一键清理功能,需要实现强制关闭进程的功能.下面介绍下killBackgroundProcesses()方法和forceStopPackage()方法. killBackgroundProces ...

  3. 洛谷P1850 [noip2016]换教室——期望DP

    题目:https://www.luogu.org/problemnew/show/P1850 注释掉了一堆愚蠢,自己还是太嫩了... 首先要注意选或不选是取 min 而不是 /2 ,因为这里的选或不选 ...

  4. jquery easyui-datagrid手动增加删除重置行

    1.实现的效果图如下 2.界面: <div region="center">         <table id="tt">       ...

  5. bzoj2060

    树形dp dp[x][0]表示x点父亲没选,dp[x][1]表示x点父亲选了,然后dp[x][0]=max(sigma(dp[c[x]][0]),sigma(dp[c[x]][1])) dp[x][1 ...

  6. ECS服务器配置密钥登录及常用日志

    一.介绍 1.SSH(22端口)是Secure Shell Protocol的简写,由IETF网络工作小组(Network Working Group)制定:在进行数据传输之前,SSH先对联机数据包通 ...

  7. Vsftpd软件包的获取与安装

    11.2  Vsftpd简介 Vsftpd是一种在GPL许可下开放源代码的FTP服务器,用于多种UNIX系统和Linux系统.Vsftpd也称为Very Secure FTP Daemon,它是一种安 ...

  8. 采用jq链(end方法和andSelf()方法)

    end()方法: <style type="text/css"> .m1{background:#09C;} .m2{border:1px solid #000;} & ...

  9. 深入浅出Android makefile(2)--LOCAL_PATH(转载)

    转自:http://nfer-zhuang.iteye.com/blog/1752387 一.说明 上文我们对acp的Android.mk文件做了一个大致的描述,使得大家对Android.mk文件有了 ...

  10. 测试神器Swagger的相关使用

    1.Swagger简介 swagger官网地址: https://swagger.io/ swagger官网文档介绍地址: https://swagger.io/about/ ​ swagge是一个易 ...