传送门
平衡树查询第k大的裸题,用并查集来维护一下哪些猫是一组的就可以了。查询第k大要维护size域,保存一个节点下面的字数的大小,更新的时候从下边更新。

#include<cstdio>
#define MAXN 200005
struct SBT {int v, sz, ch[2], cnt;
} t[MAXN];
int n, m, cnt, root;
#define Upd(k) {\t[k].sz = t[t[k].ch[0]].sz + t[t[k].ch[1]].sz + t[k].cnt;\
}
void rot(int &k, bool f) {int p = t[k].ch[f]; t[k].ch[f] = t[p].ch[!f]; t[p].ch[!f] = k;Upd(k); Upd(p); k = p;
}
inline void mt(int &k,bool f)
{if(!k) return;if(t[t[k].ch[f^1]].sz < t[t[t[k].ch[f]].ch[f]].sz) rot(k, f);else if(t[t[k].ch[f^1]].sz < t[t[t[k].ch[f]].ch[f^1]].sz) { rot(t[k].ch[f], f^1); rot(k, f); }else return;mt(t[k].ch[f],f);mt(k,f);
}
void Ins(int &k, int x) {if(!k) {k = ++ cnt; t[k].sz = t[k].cnt = 1; t[k].v = x; return; }++ t[k].sz;if(t[k].v == x) {++ t[k].cnt; return;}Ins(t[k].ch[t[k].v < x], x);mt(k, t[k].v < x);
}
int Del(int &k, int x) {if(!k) return k;int tmp;if(t[k].v == x) {if(t[k].cnt > 1) {-- t[k].cnt; --t[k].sz; return k;}else if(!(t[k].ch[0]*t[k].ch[1])) {k = t[k].ch[0]+t[k].ch[1];}else { tmp = Del(t[k].ch[0], x+1); t[k].cnt = t[tmp].cnt; t[k].v = t[tmp].v; Upd(k); return k; }}else if((t[k].v < x && !t[k].ch[1]) || (t[k].v > x && ! t[k].ch[0])) { tmp = k; k = t[k].ch[0]; Upd(k); return tmp; }else tmp = Del(t[k].ch[t[k].v < x], x);Upd(k); return tmp;
}
int Kth(int k,int x) {              //查询第k大if(x<=t[t[k].ch[1]].sz)return Kth(t[k].ch[1],x);else if(x>t[t[k].ch[1]].sz+t[k].cnt)return Kth(t[k].ch[0],x-t[t[k].ch[1]].sz-t[k].cnt);else return t[k].v;
}
char c, f;
inline void GET(int &n) {n = 0; f = 1;do {c = getchar(); if(c == '-') f = -1;} while(c > '9' || c < '0');while(c >= '0' && c <= '9') {n=n*10+c-'0';c=getchar();}n *= f;
}
/**********************并查集相关********************/
int fa[MAXN], num[MAXN];
int Q(int x) {return x == fa[x] ? x : (fa[x] = Q(fa[x]));
}
void Union(int a, int b) {int af = Q(a), bf = Q(b);if(af == bf) return;Del(root, num[af]); Del(root, num[bf]);fa[bf] = af; num[af] += num[bf];Ins(root, num[af]);
}
/***************************************************/
int main() {GET(n); GET(m);int t1, t2, t3;Ins(root, 0x7f7f7f7f); Ins(root, -0x7f7f7f7f);for(int i = 1; i <= n; ++ i) fa[i] = i, num[i] = 1, Ins(root, 1);while(m --) {GET(t1); GET(t2);if(t1) printf("%d\n", Kth(root, t2+1));else {GET(t3); Union(t2, t3);}}
}

转载于:https://www.cnblogs.com/geng4512/p/5296888.html

POJ2985 The k-th Largest Group(平衡树查询第K大)相关推荐

  1. hdu 2665(主席树查询区间k大值)

    先贴我自己写的代码做模板虽然跟原博主没什么两样.(一开始空间开的4*maxn,交到hdu上一直TLE很奇怪) #include<bits/stdc++.h> using namespace ...

  2. 快速排序查询第k大元素C语言,快速排序和查找第K大元素

    /* 输入n个整数和一个正整数k(1<=k<=n),输出这些整数从小到大排序后的第k个(例如,k=1就是最小值).n<=10^7. 快速排序的时间复杂度为:最坏情况下:O(n^2), ...

  3. group by 查询分组后 各组的内部条数与组的条数

    一.group by 查询分组后 各组的内部条数 说明:表:survey_consumer ,字段:profession SELECT COUNT(*) num,profession FROM sur ...

  4. mysql使用group by查询报错SELECT list is not in GROUP BY clause and contains nonaggregated column.

    mysql使用group by查询报错SELECT list is not in GROUP BY clause and contains nonaggregated column. 出现原因 使用g ...

  5. 通过VBA在excel中实现股票历史数据查询和K线趋势图绘制(完整的excel原件可以在我的资源中下载)

    原始文件下载地址:股票历史数据和K线图趋势线的绘制-VB文档类资源-CSDN下载 文章目录 前言 一.目标 二.方法 三.界面和使用说明 四.代码说明 1.查询历史数据 2.绘制K线图和趋势线 3.清 ...

  6. python第k序列元素查找_python查找第k小元素代码分享 -电脑资料

    复制代码代码如下: # -*- coding: utf-8 -*- from random import randint from math import ceil, floor def _parti ...

  7. js股票K线图,比较专业的K线图插件

    由於項目裏面要做個有關交易的平臺,其中要畫k線圖(蠟燭圖),在網上找了很多插件感覺都沒有專業的股票交易平臺弄的k線圖專業,因此為了趕進度,將就用了百度的echarts來做k線圖,結果發現如果點比較少的 ...

  8. Kmeans++、Mini-Batch Kmeans、Bisecting Kmeans、K中心点(K-Medoids)算法、K众数聚类、核K均值聚类

    Kmeans++.Mini-Batch Kmeans.Bisecting Kmeans.K中心点(K-Medoids)算法.K众数聚类.核K均值聚类 目录 Kmeans++.Mini-Batch Km ...

  9. k歌的录音伴奏合成技术如何实现_2019年中国在线K歌行业市场现状,在线K歌用户女性占比较高...

    一.在线K歌行业概况 中国在线K歌行业经历了萌芽期.探索期.成长期和发展期.上世纪90年代,量贩式KTV进入中国市场,我国在线K歌行业开始萌芽.随着移动互联网应用范围扩大与移动设备性能提升,唱吧.全民 ...

最新文章

  1. 关于Gitlab若干权限问题
  2. 互联网1分钟 |1212
  3. 百思不得其解,一个钻石玩家可以短时间上王者?因为猎游?
  4. 300+队伍/8大直播间,这场NXP智能车竞赛谁才是真的神车?
  5. 安装Microsoft Windows SDK 7.1时出现的错误(附解决办法)
  6. fedora操作系统优缺点_不同类型的操作系统的优缺点
  7. 【Elasticsearch】使用Elasticsearch实现同段和同句搜索
  8. 修改PHP上传文件大小限制的方法,php.ini修改php上传文件大小限制的方法
  9. 【Caffe】训练ImageNet模型
  10. 通俗易懂的理解 Redux(知乎)
  11. redis远程连接的几种方式
  12. hdu5258简单枚举
  13. CentOS 7.4 安装Teamviewer 14
  14. 获取UWP应用的三种方式
  15. NPDP产品经理小知识:财务分析与投资回报率
  16. Flash音乐暂停播放按钮
  17. java的Serialization机制
  18. 通信协议:分辨率和偏移量的使用
  19. ICO和区块链的关系
  20. 商业插画是什么?怎么学习商业插画?

热门文章

  1. 关于机器学习,你应该知道的3个热门专业术语
  2. 2018中国移动机器人行业十大热词
  3. 心得丨深度学习的技术原理、迭代路径与局限
  4. 可视化解释11种基本神经网络架构
  5. Gartner发布对2022年及以后IT组织和用户的十大预测
  6. 谷歌用量子计算机造出「时间晶体」,挑战热力学第二定律
  7. Alpha fold: 人工智能在蛋白质结构预测上跑赢人类的启示
  8. 起源,机制与趋势,如何理解和定义城市大脑
  9. 托马斯·弗里德曼:美政府应研究任正非的提议
  10. 2017-2018中国机器人创新Top100榜单深度分析