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. Linux微信web开发者工具

    Linux微信web开发者工具 https://github.com/cytle/wechat_web_devtools Linux微信web开发者工具, 可在 linux 桌面环境跑起 微信开发者工 ...

  2. iOS方法重写

    在O-C中子类可以继承父类的方法 ,而不需要从新编写相同的方法,但是有有时候子类并不想原封不动的继承父类的方法,而且是想做一些修改,这就采用啦方法的重写,方法从写有叫做方法覆盖,若子类的中的方法与父类 ...

  3. bzoj 1497(最大权闭合子图)

    1497: [NOI2006]最大获利 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 6410  Solved: 3099[Submit][Status] ...

  4. 【BZOJ 3211&3038】 花神游历各国 & 上帝造题的七分钟2

    [题目链接] [BZOJ 3211] 点击打开链接 [BZOJ 3038] 点击打开链接 [算法] 线段树 开根操作直接开到叶子节点,注意当区间中所有数都是0或1时,不需要开根 [代码] #inclu ...

  5. 云服务器装teamviewer

    [int32] EulaAccepted = 1 [int32] EulaAcceptedRevision = 6

  6. React实战之Ant Design—Upload上传_附件上传

    React实战之Ant Design—Upload上传_附件上传 Upload组件大家都在官方文档中看过了,但写的时候还是会遇到许多问题,一些新手看了文档后感觉无从下手,本文过多的简绍就不说了,直接看 ...

  7. GitHub安装使用教程

      由于重复率比较大,为了尊重他人的成果,先在此注明本文是在学习了以下博文之后的一些总结归纳,并且说明了一些本人实际使用GitHub遇到的问题,并给出了解决办法 .本人的操作系统是window10,所 ...

  8. Android 性能优化(27)*zipalign让apk数据对齐,运行更快。

    1.zipalign 简介 zipalign is an archive alignment tool that provides important optimization to Android ...

  9. 在控制台中输出 ASP.NET 网站的跟踪信息

    实现方法: 1. 可以在 C# 代码中调用 System.Diagnostics.Debug.WriteLine() 来实现. 其效果类似于在控制台应用程序中调用 Console.WriteLine( ...

  10. 关于.Net中Process的使用方法和各种用途汇总(一):Process用法简介

    简介: .Net中Process类功能十分强大.它可以接受程序路径启动程序,接受文件路径使用默认程序打开文件,接受超链接自动使用默认浏览器打开链接,或者打开指定文件夹等等功能. 想要使用Process ...