luoguP3871 [TJOI2010]中位数
题目链接
题解
平衡树
代码
#include<vector>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
inline int read() {
int x = 0,f = 1;char c = getchar();
while(c < '0'||c > '9'){if(c == '-')f = -1;c = getchar();}
while(c <= '9' &&c >= '0')x = x * 10 + c - '0',c = getchar();
return x * f;
}
#define root ch[0][1]
const int maxn = 1000007;
int n,a[maxn],Num = 0,val[maxn],fa[maxn],siz[maxn],ch[maxn][2],num[maxn];
inline int ident(int x) { return x == ch[fa[x]][0] ? 0 : 1; }
inline void connect(int x,int y,int which) {fa[x] = y,ch[fa[x]][which] = x;}
inline void update(int x) {
siz[x] = siz[ch[x][1]] + siz[ch[x][0]] + num[x];
}
void rotate(int x) {
int y = fa[x],z = fa[y];
int yson = ident(x),zson = ident(y);
int ixson = ch[x][yson ^ 1];
connect(ixson,y,yson);
connect(x,z,zson);
connect(y,x,yson ^ 1);
update(y); update(x);
}
void splay(int x,int to) {
to = fa[to] ;
while(fa[x] != to) {
int y = fa[x];
if(fa[y] == to) rotate(x);
else if(ident(x) == ident(y)) rotate(y),rotate(x);
else rotate(x),rotate(x);
//rotate(x);
}
}
int newnode(int Fa,int x) {
val[++ Num] = x;
fa[Num] = Fa;
num[Num] = siz[Num] = 1; return Num;
}
void insert(int x) {
if(!root) {root = newnode(0,x);return ;}
int now = root;
while(now ) {
siz[now] ++;
if(val[now] == x) {num[now] ++ ;return;}
int nxt = val[now] < x ? 1 : 0;
if(!ch[now][nxt] ){ch[now][nxt] = newnode(now,x); splay(ch[now][nxt],root);return;}
now = ch[now][nxt];
}
}
int Arank(int x) {
int now = root;
while(now) {
int used = siz[now] - siz[ch[now][1]];
if(x > siz[ch[now][0]] && x <= used) return val[now];
if(used < x) x -= used,now = ch[now][1];
else now = ch[now][0];
}
}
int main() {
n = read();
for(int i = 1;i <= n;++ i) insert(read());
int q = read();
char op[10];
for(int i = 1;i <= q;++ i) {
scanf("%s",op + 1);
if(op[1] == 'a') {
insert(read()); n ++;
} else {
printf("%d\n",Arank(n / 2 + (n & 1)) );
}
}
return 0;
}
luoguP3871 [TJOI2010]中位数的更多相关文章
- 洛谷 P3871 [TJOI2010]中位数 解题报告
P3871 [TJOI2010]中位数 题目描述 给定一个由N个元素组成的整数序列,现在有两种操作: 1 add a 在该序列的最后添加一个整数a,组成长度为N + 1的整数序列 2 mid 输出当前 ...
- 洛谷——P3871 [TJOI2010]中位数
P3871 [TJOI2010]中位数 一眼秒掉,这不是splay水题吗,套模板 #include<bits/stdc++.h> #define IL inline #define N 1 ...
- 题解 P3871 【[TJOI2010]中位数】
orz各位大佬,题解太强了,主席树,堆,线段树,splay,还有暴力,太巨了.所以我用的是fhq treap(好像更高级).算了. 反正都是平衡树,这道题就是动态求中位数,不会做的同学可以先做弱化版P ...
- TJOI2010中位数
中位数 上面是题目链接. 这一题比较水. 思路非常显然. 用mid查询时,只要返回中间值就行了. 主要就是add操作. 我们肯定不能插在末尾,然后用系统快排,这样只有30分. 那么正确的操作应该是二分 ...
- 洛谷P3871 [TJOI2010]中位数(splay)
题目描述 给定一个由N个元素组成的整数序列,现在有两种操作: 1 add a 在该序列的最后添加一个整数a,组成长度为N + 1的整数序列 2 mid 输出当前序列的中位数 中位数是指将一个序列按照从 ...
- [LUOGU] P3871 [TJOI2010]中位数
题目描述 给定一个由N个元素组成的整数序列,现在有两种操作: 1 add a 在该序列的最后添加一个整数a,组成长度为N + 1的整数序列 2 mid 输出当前序列的中位数 中位数是指将一个序列按照从 ...
- 洛谷 3871 [TJOI2010]中位数
[题解] 平衡树模板题,不过因为可以离线,所以有别的做法.把询问倒着做,变成删掉数字.求中位数,于是可以二分+树状数组. #include<cstdio> #include<cstr ...
- [TJOI2010]中位数
题目描述 给定一个由N个元素组成的整数序列,现在有两种操作: 1 add a 在该序列的最后添加一个整数a,组成长度为N + 1的整数序列 2 mid 输出当前序列的中位数 中位数是指将一个序列按照从 ...
- 洛谷3871 [TJOI2010]中位数 维护队列的中位数
题目描述 给定一个由N个元素组成的整数序列,现在有两种操作: 1 add a 在该序列的最后添加一个整数a,组成长度为N + 1的整数序列 2 mid 输出当前序列的中位数 中位数是指将一个序列按照从 ...
随机推荐
- Dream------scala--函数定义、流程控制、异常处理
Dream------scala--函数定义.流程控制.异常处理 一.函数的定义 1.新建工程
- Spring4笔记8--Spring与JDBC模板(IoC应用的例子)
Spring 与 JDBC模板: 为了避免直接使用 JDBC 而带来的复杂且冗长的代码,Spring 提供了一个强有力的模板类---JdbcTemplate 来简化 JDBC 操作.并且,数据源 Da ...
- 【codeforces】【比赛题解】#869 CF Round #439 (Div.2)
良心赛,虽然我迟了半小时233333. 比赛链接:#869. 呃,CF的比赛都是有背景的……上次是<哈利波特>,这次是<物语>…… [A]巧妙的替换 题意: Karen发现了石 ...
- MVVM模式用依赖注入的方式配置ViewModel并注册消息
最初的想法 这次主要讨论下给View指定ViewModel的事情.一般来说给View指定ViewModel常用的方式有两种,一种是在View的后台代码中写DataContext = new ViewM ...
- 牛x的JavaScript编辑器你知道几个
英文:Martin Heller 译文:葡萄城控件 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入学习交流群343599877,我们一起学前端! 对于JavaScript程序员来说,目前有很 ...
- 创建第一个MySQL数据库earth及表area
Windows 10家庭中文版,MySQL 5.7.20 for Win 64,2018-05-08 数据库earth描述: 用于记录地球上的事物,一期包含地理区域信息——表area. 字符集编码:u ...
- java基础17 模板模式
1.模版模式 解决某类事物的步骤有些是固定的,有些会发生改变的,那么这个时候我们可以为这一类事物提供一个模版代码,从而提高效率. 2.模版模式的步骤 1.先写出解决该类事物的其中一种解决方案; ...
- 洛谷P2279消防局的设立
传送门啦 一个很摸不清头脑的树形dp 状态: $ dp[i][0] $ :选自己 $ dp[i][1] $ :选了至少一个儿子 $ dp[i][2] $ :选了至少一个孙子 ------------- ...
- CCF CSP 201412-4 最优灌溉
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201412-4 最优灌溉 问题描述 雷雷承包了很多片麦田,为了灌溉这些麦田,雷雷在第一个麦田挖 ...
- C++中memcpy和memmove
二者都是内存拷贝 memcpy内存拷贝,没有问题;memmove,内存移动?错,如果这样理解的话,那么这篇文章你就必须要好好看看了,memmove还是内存拷贝.那么既然memcpy和memmove二者 ...