POJ 2985 The k-th Largest Group [并差集+treap]

poj2985(名次树(treap))找第k大 The k-th Largest Group 有N只猫,开始每只猫都是一个小组,下面要执行M个操作,操作0 i j 是把i猫和j猫所属的小组合并,操作1 k 是问你当前第k大的小组大小是多少. 且k #include struct Node { Node *ch[2]; int r; //随机权值 int v; //值 int s; //附加域size Node(int vv): v(vv) { 阅读详情

题意:给出N个数,每个数各自成一个集合,然后M个操作,有两种,0,会将两个数所属的集合并起,1,问当前所有集合中第K大的size是多少

范围: n,m<=20W

解法:很容易联想到并查集,并且当前第K大可以用treap 求,一开始直接塞N个1进去,然后果然T了=  =,于是把等于1的用一个计数器统计一下,就过了,虽然有卡过的嫌疑,但不想改treap了(可以在节点里加一个计数器cot更快的维护,但仔细想想好像就1重复的最多...)。

代码:

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<iostream>
#include<stdlib.h>
#include<set>
#include<map>
#include<queue>
#include<vector>
#include<bitset>
#pragma comment(linker, "/STACK:1024000000,1024000000")
template <class T>
bool scanff(T &ret){ //Faster Input
    char c; int sgn; T bit=0.1;
    if(c=getchar(),c==EOF) return 0;
    while(c!='-'&&c!='.'&&(c<'0'||c>'9')) c=getchar();
    sgn=(c=='-')?-1:1;
    ret=(c=='-')?0:(c-'0');
    while(c=getchar(),c>='0'&&c<='9') ret=ret*10+(c-'0');
    if(c==' '||c=='\n'){ ret*=sgn; return 1; }
    while(c=getchar(),c>='0'&&c<='9') ret+=(c-'0')*bit,bit/=10;
    ret*=sgn;
    return 1;
}
#define inf 1073741823
#define llinf 4611686018427387903LL
#define PI acos(-1.0)
#define lth (th<<1)
#define rth (th<<1|1)
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define drep(i,a,b) for(int i=a;i>=b;i--)
#define gson(i,root) for(int i=ptx[root];~i;i=ed[i].next)
#define tdata int testnum;scanff(testnum);for(int cas=1;cas<=testnum;cas++)
#define mem(x,val) memset(x,val,sizeof(x))
#define mkp(a,b) make_pair(a,b)
#define findx(x) lower_bound(b+1,b+1+bn,x)-b
#define pb(x) push_back(x)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;

const int NN=1000100;

//treap
int tot,root;
struct node{
    int size,l,r,rnd,val;
}t[NN];
void maintain(int x){
    if(x<=0)return;
    t[x].size=t[t[x].l].size+t[t[x].r].size+1;
}
void lturn(int &x){
    int tmp=t[x].r;
    t[x].r=t[tmp].l;
    t[tmp].l=x;
    maintain(x);
    x=tmp;
}
void rturn(int &x){
    int tmp=t[x].l;
    t[x].l=t[tmp].r;
    t[tmp].r=x;
    maintain(x);
    x=tmp;
}
void insert(int &x,int val){
    if(x==0){
        x=++tot;
        t[x].size=1;
        t[x].rnd=rand();
        t[x].l=t[x].r=0;
        t[x].val=val;
    }
    else if(val>t[x].val){
        insert(t[x].r,val);
        if(t[t[x].r].rnd<t[x].rnd)lturn(x);
    }
    else{
        insert(t[x].l,val);
        if(t[t[x].l].rnd<t[x].rnd)rturn(x);
    }
    maintain(x);
}
void dele(int &x,int val){
    if(val>t[x].val)dele(t[x].r,val);
    else if(val<t[x].val)dele(t[x].l,val);
    else{
        if(t[x].l==0)x=t[x].r;
        else if(t[x].r==0)x=t[x].l;
        else{
            if(t[t[x].l].rnd<t[t[x].r].rnd){
                rturn(x);
                dele(t[x].r,val);
            }
            else{
                lturn(x);
                dele(t[x].l,val);
            }
        }
    }
    maintain(x);
}
int findk(int x,int val){
    int lsz=t[t[x].l].size;
    int rsz=t[t[x].r].size;
    if(lsz+1==val)return t[x].val;
    if(val<=lsz)return findk(t[x].l,val);
    return findk(t[x].r,val-lsz-1);
}


//union find set
int f[NN],sz[NN],gnum,num1;
int find(int x){
    return (x==f[x])?x:find(f[x]=f[f[x]]);
}
void connec(int x,int y){
    int i=find(x);
    int j=find(y);
    if(i==j)return;
    gnum--;
    if(sz[i]!=1)dele(root,sz[i]);
    else num1--;
    if(sz[j]!=1)dele(root,sz[j]);
    else num1--;
    f[i]=j;
    sz[j]+=sz[i];
    insert(root,sz[j]);
}

//solve
int n,m;
void init(){
    tot=root=0;
    gnum=num1=n;
    rep(i,1,n)f[i]=i,sz[i]=1;
}
void solve(){
    int op,x,y;
    rep(i,1,m){
        scanff(op);
        scanff(x);
        if(!op){
            scanff(y);
            connec(x,y);
        }
        else {
            int st1=gnum-num1+1;
            if(x>=st1)printf("1\n");
            else printf("%d\n",findk(root,gnum-num1-x+1));
        }
    }
}
int main(){
    while(scanf("%d%d",&n,&m)!=EOF){
        init();
        solve();
    }
    return 0;
}


SAP-ABAP:SAP的BAPI_GOODSMVT_CREATE 深度解析 BAPI_GOODSMVT_CREATE 深度解析** **功能定位**:SAP 标准接口,支持 **11 种库存移动场景**(收货/发货/转储/生产投料等),是 MM 模块集成核心 阅读详情

相关推荐

SPI扩展CAN方案:从寄存器配置到多路通信实战

本文详细介绍了SPI扩展CAN方案的实现方法,从寄存器配置到多路通信实战。通过使用MCP2517FD芯片和SPI接口,可低成本扩展多路CAN通道,适用于工业控制领域。文章涵盖硬件设计、寄存器配置、中断优化及性能调优等核心内容,帮助开发者高效解决设备节点过多的问题。

weixin_42657024的博客 362

【POJ 2985】 The k-th Largest Group Treap+并查集

Treap:佛系平衡树,爱转不转,靠随机,靠随缘,只有单旋转。比普通的二叉树多一个priority值,保存结点的权重用随机数生成。如果一个节点的儿子比他的父亲优先级大【或小】,就执行一次单选转。期望平均O(nlgn) 可以说是很随缘了。删除稍微复杂一点:1、叶子节点,直接消失。2、没有左儿子/右儿子,把该节点反复执行相应旋转,转到情况1,直接删除。3、朝优先级低的那方向转。模板const int ...

wodasini的专栏 291

Ansys Zemax与Speos协同设计:HUD系统从光学优化到驾驶模拟的全流程解析

本文详细解析了如何利用Ansys Zemax与Speos这对“黄金搭档”进行HUD系统的协同设计。流程始于Zemax进行核心光学架构与像差优化,奠定性能基础;随后将设计无缝导入Speos,通过HUD光学分析模块进行量化验证;最终在虚拟驾驶环境中进行沉浸式模拟,评估实际视觉体验与系统集成效果,实现从光学优化到驾驶模拟的全流程闭环。

weixin_29201933的博客 273

poj 2985 The k-th Largest Group (Treap+并查集)

The k-th Largest Group Time Limit: 2000MS   Memory Limit: 131072K Total Submissions: 9120   Accepted: 2979 Description Newman likes playing with cats. He possesses lo

Timeclimber 533

英飞凌AURIX 2G 系列MCU关于外设模块EVADC的实现原理及对应MCAL(EB Tresos)配置项详细讲解

本文章讲述了英飞凌AURIX 2G系列MCU关于外设模块EVADC的实现原理及对应MCAL配置工具(EB)的配置项。

weixin_46176506的博客 6274

金蝶云星空核心数据表解析与高效关联查询指南

本文深入解析金蝶云星空核心数据表结构,提供高效关联查询的实战指南。文章详细介绍了基础资料、业务单据和财务模块的关键表及其关联逻辑,重点阐述了如何利用关联表(_LK表)进行跨单据溯源,并分享了编写高性能SQL的实用技巧与避坑建议,帮助开发者、实施顾问和数据分析师快速掌握数据查询方法,提升工作效率。

weixin_29254673的博客 524

POJ 2985 The k-th LargestGroup(Treap+并查集)

POJ 2985 The k-th LargestGroup(Treap+并查集) http://poj.org/problem?id=2985 题意:有N只猫,开始每只猫都是一个小组,下面要执行M个操作,操作0 i j 是把i猫和j猫所属的小组合并,操作1 k 是问你当前第k大的小组大小是多少. 且k 分析: 用并查集维护每只猫所属的集合,且维护集合中的节点数. 然后假设集合S1和集合

code 1948

dify安装ollama插件及OLLAMA模型添加失败问题完整解决方法

plugin_daemon-1 | 2025/05/10 17:37:36 stdio.go:160: [INFO]plugin langgenius/ollama:0.0.6: Installed model: ollama 提示ollama安装成功,再添加模型就不会有问题了。安装dify1.2.0和1.3.1均出现OLLAMA插件安装失败或插件安装后添加模型失败的问题,具体表现为一是添加ollama插件时没反应,需要二次添加才成功;二是添加模型时点保存报500错误或点保存后没反应,无法成功添加。

symstandsun的博客 9078

POJ2985-The k-th Largest Group(Treap + 并查集)

The k-th Largest Group Time Limit: 2000MS Memory Limit: 131072K Total Submissions: 9639 Accepted: 3142 Description Newman likes playing with cats. He possesses lots of cats in his home. B...

swust5120160705的博客 346

【Bluetooth蓝牙开发】十一、一文秒懂 | 超详细的Bluez交叉编译

1、开篇词 2、蓝牙开发入门 3、蓝牙协议栈总览 4、蓝牙协议栈——物理层 5、蓝牙协议栈——链路层 6、蓝牙协议栈——传输层 7、蓝牙协议栈——L2CAP协议 8、蓝牙协议栈——ATT协议 9、蓝牙协议栈——GATT协议 10、蓝牙通信流程分析 11、蓝牙协议栈——Bluez交叉编译 12、蓝牙调试工具汇总

Donge's Blog 3976

SIMULINK开发项目实例 1000 例专栏之第802例--基于电机驱动系统的场景实例:永磁同步电机(PMSM)在电动汽车中的矢量控制仿真

随着全球对环境保护的关注增加,电动汽车(Electric Vehicle, EV)因其环保特性而受到广泛关注。永磁同步电机(Permanent Magnet Synchronous Motor, PMSM)由于其高效率、高功率密度和良好的动态响应性能,在电动汽车驱动系统中得到了广泛应用。矢量控制(Field-Oriented Control, FOC)是实现PMSM高性能控制的关键技术之一,它能够实现对电机转矩和磁场的独立控制,从而达到类似直流电机的控制效果。本文将详细介绍如何使用来构建一个。

xiaoheshang_123的博客 269

The k-th Largest (并查集+线段树)

The k-th Largest Group Time Limit: 2000ms Memory Limit: 131072KB 64-bit integer IO format: %lld      Java class name: Main Newman likes playing with cats. He possesses lots of cats in

x_y_q_的博客 1179

CPU 访问外设的两种核心机制:MMIO(Memory-Mapped I/O) 和 DMA(Direct Memory Access)

BAR和DMA是计算机系统中两种关键的数据传输机制:BAR(基址寄存器)用于CPU与设备间的控制通信,映射设备寄存器便于配置操作;而DMA(直接内存访问)允许设备直接读写系统内存,无需CPU参与大量数据传输。典型场景如NVMe SSD读取数据时,CPU通过BAR下发指令,设备通过DMA高效传输数据到主机内存,最后中断通知CPU。虽然BAR能映射大内存空间,但仍无法替代DMA的高效数据传输功能,两者各司其职——BAR负责控制,DMA专注数据传输,共同实现高性能的硬件交互。

MHD0815的博客 237

POJ2985 The k-th Largest Group(treap+并查集)

题目链接 Input 1st line: Two numbers N and M (1 ≤ N, M ≤ 200,000), namely the number of cats and the number of operations. 2nd to (m + 1)-th line: In each line, there is number C specifying t

HOrchard 589

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

[poj-2985]The k-th Largest Group_Treap+并查集

The k-th Largest Group poj-2985     题目大意:给你n只猫,有两种操作:1.将两只猫所在的小组合并。2.查询小组数第k大的小组的猫数。     注释:1<=n,m<=200,000.       想法:开始的想法就是用Treap合并,用Treap删除。然后发现Treap合并实在是...太tm gay了。没办法,用并查集吧。想法就出现了,...

dianan0938的博客 155

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【POJ2985】【Treap + 并查集】The k-th Largest Group

Description Newman likes playing with cats. He possesses lots of cats in his home. Because the number of cats is really huge, Newman wants to group some of the cats. To do that, he first offer...

Gregory99174的博客 225

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

[POJ2985]The k-th Largest Group

Problem 刚开始,每个数一个块。 有两个操作:0 x y 合并x,y所在的块 1 x 查询第x大的块 Solution 用并查集合并时,把原来的大小删去,加上两个块的大小和。 Notice 非旋转Treap一直错。。。 Code 旋转Treap(非旋转Treap总是TLE...) #include<cmath> #include<cstdio> #inclu...

Q882199的博客 223

poj2985 The k-th Largest Group

并查集+treap维护的第k大数 #include <iostream> #include <cstdlib> #include <cstdio> using namespace std; struct Node{ int val, l, r, rnd, sze, hav; }nd[200005]; int n, m, fa[200005], ...

dianjiaxian1205的博客 126

Treap树(并查集 + 树堆)POJ —— 2985 The k-th Largest Group

Treap树(并查集 + 树堆)POJ —— 2985 The k-th Largest Group

大田二十 797

POJ 2985 The k-th Largest Group 第k大数 Treap / 树状数组 + 并查集

题目链接题意有 nn 只猫,mm 次操作(n,m≤2e5n,m\leq 2e5): 0 i j0\ i\ j:将第 ii 只猫所在组与第 jj 只猫所在组合并; 1 k1\ k:询问第 kk 大的组中有多少只猫。法一:Treap参考资料董的博客 数据结构之Treap clj的treap ——wbysr POJ 2985 Treap平衡树(求第k大的元素) ——潇洒走一回LW注意点

kkkkahlua的博客 351

The k-th Largest Group POJ - 2985 treap+并查集

Newman likes playing with cats. He possesses lots of cats in his home. Because the number of cats is really huge, Newman wants to group some of the cats. To do that, he first offers a number to each o

mayuqing98的博客 429

POJ 2985 The k-th LargestGroup(Treap树)

Description Newman likes playing with cats. He possesses lots of cats in his home. Because the number of cats is really huge, Newman wants to group some of the cats. To do that, he first offers a nu...

邵光亮的博客 807

POJ2985 The k-th Largest Group treap

POJ2985比较简单的平衡树题目 树内不要添加容量为1的节点 否则会超时。 #include<iostream> #include<cstdio> #include<cstdlib> #include<cmath> #include<cstring> #include<vector> #include&l...

weixin_30467087的博客 91

poj 2985 The k-th Largest Group 求第K大数 Treap, Binary Index Tree, Segment Tree

题目链接:点击打开链接 题意:有两种操作,合并集合,查询第K大集合的元素个数。(总操作次数为2*10^5) Treap模板(静态数组) #include #include #include #include #include const int maxNode = 500000 + 100; const int inf = 0x3f3f3f3f; struct Tr

天亮说晚安 2388

[Treap]poj2985 The k-th Largest Group

题意给出N只猫,然后有两种操作,分别是把两只猫所在的组合并,另一个是查询第k大的小组的猫的数量思路其实这道题目有很多种做法,但是查询第k大当然是用平衡树是最好的。那么在这里用并查集来记录每一个猫的小组,然后在Treap中插入每一个小组的数量。修改的时候就把原来的两个删去,然后再插入合并之后的值。 但是这种方法会超时……可能是Treap写得不好的原因。那么很容易想到优化,因为输入保证查询的是在范围内

_Evolution的博客 367

[poj2985]The k-th Largest Group[Treap]

1 #include <iostream> 2 #include <algorithm> 3 #include <cstdio> 4 #include <cstdlib> 5 #include <cstring> 6 #include <cmath> 7 #include <c...

weixin_30949361的博客 178
上一篇: POJ 1442 Black Box [treap]
下一篇: POJ 1785 Binary Search Heap Construction [treap]
GrassTreeFlower
博客等级 码龄11年 14粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值