洛谷——P3871 [TJOI2010]中位数
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]中位数的更多相关文章
- 洛谷 P3871 [TJOI2010]中位数 解题报告
P3871 [TJOI2010]中位数 题目描述 给定一个由N个元素组成的整数序列,现在有两种操作: 1 add a 在该序列的最后添加一个整数a,组成长度为N + 1的整数序列 2 mid 输出当前 ...
- 洛谷P3871 [TJOI2010]中位数(splay)
题目描述 给定一个由N个元素组成的整数序列,现在有两种操作: 1 add a 在该序列的最后添加一个整数a,组成长度为N + 1的整数序列 2 mid 输出当前序列的中位数 中位数是指将一个序列按照从 ...
- 洛谷 3871 [TJOI2010]中位数
[题解] 平衡树模板题,不过因为可以离线,所以有别的做法.把询问倒着做,变成删掉数字.求中位数,于是可以二分+树状数组. #include<cstdio> #include<cstr ...
- 洛谷3871 [TJOI2010]中位数 维护队列的中位数
题目描述 给定一个由N个元素组成的整数序列,现在有两种操作: 1 add a 在该序列的最后添加一个整数a,组成长度为N + 1的整数序列 2 mid 输出当前序列的中位数 中位数是指将一个序列按照从 ...
- 洛谷 P3871 中位数
->题目链接 题解: 暴力 经鉴定,此题数据水到没朋友. #include<algorithm> #include<iostream> #include<cstdi ...
- 洛谷 P1627 [CQOI2009]中位数 解题报告
P1627 [CQOI2009]中位数 题目描述 给出1~n的一个排列,统计该排列有多少个长度为奇数的连续子序列的中位数是b.中位数是指把所有元素从小到大排列后,位于中间的数. 输入输出格式 输入格式 ...
- 洛谷——P1627 [CQOI2009]中位数
P1627 [CQOI2009]中位数 给出1~n的一个排列,统计该排列有多少个长度为奇数的连续子序列的中位数是b.中位数是指把所有元素从小到大排列后,位于中间的数. 中位数的题目有关统计的话,可以转 ...
- [LUOGU] P3871 [TJOI2010]中位数
题目描述 给定一个由N个元素组成的整数序列,现在有两种操作: 1 add a 在该序列的最后添加一个整数a,组成长度为N + 1的整数序列 2 mid 输出当前序列的中位数 中位数是指将一个序列按照从 ...
- 洛谷 P3879 [TJOI2010]阅读理解
P3879 [TJOI2010]阅读理解 题目描述 英语老师留了N篇阅读理解作业,但是每篇英文短文都有很多生词需要查字典,为了节约时间,现在要做个统计,算一算某些生词都在哪几篇短文中出现过. 输入输出 ...
随机推荐
- linux 点命令
cat a date . a Mon Jun :: CST linux .(点命令):读取并且在当前的shell中执行文件中的命令
- iOS如何查看静态库.a文件支持的cpu类型
打开终端: 输入 lipo -info 然后将你要查看的静态库.a 文件找到,拖入 -info 后边.假设路径为A,即为 lipo -info A 回车键,然后就会看到静态库是否支持 armv7,ar ...
- 7-81 js课程小结
7-81 js课程小结 学习要点 理解全局对象 变量的作用范围 理解全局对象Global 全局属性和函数可用于所有内建的 JavaScript 对象.全局对象是所有全局方法的拥有者,用来统一管理全局方 ...
- USACO Section 1.2PROB Transformations
挺有趣的一道题,呵呵,不算难 /* ID: jusonal1 PROG: transform LANG: C++ */ #include <iostream> #include <f ...
- 三种解密 HTTPS 流量的方法介绍
转载自:https://imququ.com/post/how-to-decrypt-https.html作者: Jerry Qu Web 安全是一项系统工程,任何细微疏忽都可能导致整个安全壁垒土崩瓦 ...
- python库学习笔记——re库:正则表达式入门(一)
什么是正则表达式? 我们在处理文本文件的时候,会按照某种规则查找某些特定的字符串.比方我们希望从一堆电子档案中找到人员的电话号码整理成通讯录.于是,我们可以利用特定字符串的规律编程获得我们想要的信息. ...
- [Codeforces 482A] Diverse Permutation
[题目链接] https://codeforces.com/contest/482/problem/A [算法] 首先构造一个(k + 1)个数的序列 , 满足它们的差为1-k 对于i > k ...
- 2-6 ES6常用语法
- F5 SSLVPN 的安装问题
WIN10下安装SSLVPN问题 1.右击计算机 -->选择管理-->查看安装的插件是否显示感叹号 2.如果显示感叹号-->则进行更新驱动-->>手动选择-->网络 ...
- 对mysql修改库里面所有的引擎mysaim 为 innodb
1.查看当前数据引擎的命令: show engines; 2. USE `[DBNAME]`; SELECT GROUP_CONCAT(CONCAT( 'ALTER TABLE ' ,TABLE_NA ...