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

不用买VR设备!用UE5内置模拟器开发虚拟现实项目的完整教程 本文提供了一套无需购买昂贵VR硬件的虚拟现实开发最佳实践方案。详细介绍了如何利用虚幻引擎5内置的XR模拟器,从零开始配置开发环境、模拟操作、构建场景并实现核心交互逻辑。通过这套纯软件方案,开发者可以高效学习VR开发核心,大幅降低入门门槛和成本。 阅读详情

wa了或者TLE了..


//#include<bits/stdc++.h>
#include<iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define sf scanf
#define pf printf
#define mem(a,b) memset(a,b,sizeof(a));
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define MP make_pair
#define ULL unsigned long long
#define LL   long long
#define inf 0x3f3f3f3f
#define md ((ll+rr)>>1)
#define ls (i<<1)
#define rs (ls|1)
#define eps 1e-5
#define ree freopen("in.txt","r",stdin);
#define bug pf("----------------");
#define N 200005
#define M 500020
#define INF 1e9

int par[N],sz[N];
int n,m;
struct Node{
    Node *ch[2];
    int r,v,s;
    Node(int v):v(v){
        r=rand();
        s=1;
        ch[0]=ch[1]=NULL;
    }
    void maintain(){
        s=1;
        if(ch[0])s+=ch[0]->s;
        if(ch[1])s+=ch[1]->s;
    }
    int cmp(int x){
        if(x==v)return -1;
        return x<v?0:1;
    }
}*root;
void rotate(Node*&o,int d){
    Node*k=o->ch[d^1];
    o->ch[d^1]=k->ch[d];
    k->ch[d]=0;
    o->maintain();
    k->maintain();
    o=k;
}
void insert(Node*&o,int v){
    if(o==NULL)o=new Node(v);
    else{
        int d=v<o->v?0:1;
        insert(o->ch[d],v);
        if(o->ch[d]->r>o->r){
            rotate(o,d^1);
        }
    }
    o->maintain();
}
void remove(Node*&o,int v){
    int d=o->cmp(v);
    if(d==-1){
        Node*u=o;
        if(o->ch[0]&&o->ch[1]){
            int d2=o->ch[0]->r<o->ch[1]->r?0:1;
            rotate(o,d2);
            remove(o->ch[d2],v);
        }
        else{
            if(o->ch[0]==NULL)o=o->ch[1];
            else o=o->ch[0];
            delete u;
        }
    }
    else remove(o->ch[d],v);
    if(o)o->maintain();
}
int kth(Node*o,int k){
    if(o==NULL||k<=0||k>o->s)return 1;
    int s=(o->ch[1]==NULL)?0:o->ch[1]->s;
    if(k==s+1)return o->v;
    else if(k<=s)return kth(o->ch[1],k);
    else return kth(o->ch[0],k-s-1);
}
int Find(int x){
    return x==par[x]?x:Find(par[x]);
}
void bind(int i,int j){
    int fa=Find(i),fb=Find(j);
    if(fa!=fb){
        if(sz[fa]!=1)remove(root,sz[fa]);
        if(sz[fb]!=1)remove(root,sz[fb]);
        insert(root,sz[fa]+sz[fb]);
        par[fa]=fb;
        sz[fb]+=sz[fa];
    }
}
int main(){
    //ree
    root=NULL;
    sf("%d%d",&n,&m);
    rep(i,1,n)par[i]=i,sz[i]=1;
    int op;
    rep(i,1,m){
        sf("%d",&op);
        if(op==1){
            int k;
            sf("%d",&k);
            pf("%d\n",kth(root,k));
        }
        else{
            int x,y;
            sf("%d%d",&x,&y);
            bind(x,y);
        }
    }
}

静态数组实现..
参考https://vjudge.net/solution/2661312

可是还是wa了..


//#include<bits/stdc++.h>
#include<iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define sf scanf
#define pf printf
#define mem(a,b) memset(a,b,sizeof(a));
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define MP make_pair
#define ULL unsigned long long
#define LL   long long
#define inf 0x3f3f3f3f
#define md ((ll+rr)>>1)
#define ls (i<<1)
#define rs (ls|1)
#define eps 1e-5
#define ree freopen("in.txt","r",stdin);
#define bug pf("----------------");
#define N 200500
#define M 500020
#define INF 1e9

int fa[N],cnt[N];
int n,m;
struct Node{
    int v,r,s,cnt;
    Node*ch[2];
    Node(){}
    Node(int v):v(v){
        ch[0]=ch[1]=NULL;
        r=rand();
        s=cnt=1;
    }
    int cmp(int x){
        if(v==x)return -1;
        return x<v?0:1;
    }
    void mt(){
        s=cnt;
        if(ch[0])
            s+=ch[0]->s;
        if(ch[1])
            s+=ch[1]->s;
    }
}pool[N<<1];
int sz;
void rt(Node*&p,int d){
    Node*k=p->ch[d^1];
    p->ch[d^1]=k->ch[d];
    k->ch[d]=p;
    p->mt();
    k->mt();
    p=k;
}
void insert(Node*&p,int x){
    if(!p){
        pool[sz]=Node(x);
        p=&pool[sz++];
        return;
    }
    int d=p->cmp(x);
    if(d==-1){
        p->s++;
        p->cnt++;
        return ;
    }
    insert(p->ch[d],x);
    if(p->ch[d]->r  >p->r)
        rt(p,d^1);
    p->mt();
}
void remove(Node*&p,int x){
    int d=p->cmp(x);
    if(d==-1){
        if(p->cnt>1){
            p->cnt--;p->s--;
            return;
        }
        if(p->ch[0]==NULL)
            p=p->ch[1];
        else if(p->ch[1]==NULL)
            p=p->ch[0];
        else{
            int d2=p->ch[0]->r>p->ch[1]->r?1:0;
            rt(p,d2);
            remove(p->ch[d2],x);
        }
    }
    else remove(p->ch[d],x);
    if(p)
        p->mt();
}
int kth(Node*p,int k){
    if(!p)return 0;
    int tot=0;
    if(p->ch[1])
        tot=p->ch[1]->s;
    if(k>tot&&k<=tot+p->cnt)
        return p->v;
    if(k<=tot)
        return kth(p->ch[1],k);
    return kth(p->ch[0],k-tot-p->cnt);
}
int Find(int x){
    return x==fa[x]?x:Find(fa[x]);
}
Node*root;
int main(){
    //ree
    while(~sf("%d%d",&n,&m)){
        sz=0;
        root=NULL;
        rep(i,1,n)fa[i]=i,cnt[i]=1,insert(root,1);
        int op;
        rep(i,1,m){
            sf("%d",&op);
            if(op==1){
                int k;
                sf("%d",&k);
                pf("%d\n",kth(root,k));
            }
            else{
                int x,y;
                sf("%d%d",&x,&y);
                int fx=Find(x),fy=Find(y);
                if(fx!=fy){
                    remove(root,cnt[fx]);
                    remove(root,cnt[fy]);
                    cnt[fx]+=cnt[fy];
                    fa[fx]=fy;
                    insert(root,cnt[fx]);
                }
            }
        }
    }
}
Kali Linux实战:Aircrack-ng破解Wi-Fi密码的完整流程与常见问题解决 本文详细介绍了在Kali Linux中使用Aircrack-ng套件进行Wi-Fi密码破解的完整流程,包括环境准备、无线网卡配置、网络扫描、握手包捕获与字典破解等关键步骤。同时针对无线网卡不支持监听模式、无法捕获握手包等常见问题提供了实用解决方案,帮助安全研究人员有效评估无线网络安全性。 阅读详情

相关推荐

微信小程序 实现拼图功能

微信小程序 实现碎片拼图

weixin_45689786的博客 2250

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

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

wodasini的专栏 291

trae CN 配置ida的mcp教程

本文介绍了在TraeCN中配置IDA Pro MCP服务的完整步骤:1)准备IDA Pro 9.0+和Python 3.11+环境;2)安装MCP服务端并配置插件;3)生成MCP配置文件;4)在TraeCN中添加HTTP类型MCP服务(默认端口13337);5)测试连接。重点说明了HTTP配置方式的操作流程,包括手动启动服务、正确填写JSON配置等关键环节。

2401_87915504的博客 1956

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

主板USB接口全部失效解决方案(通用串行总线USB控制器有黄色叹号)保姆级教程亲测有效

通用串行总线控制器总是有叹号解决办法 办公室的崩腾时代老电脑,疫情期间没人用,来了开机之后发现鼠标键盘都用不了,本以为是主机放时间长出了问题,后来想起来就百度了“鼠标键盘都失效”的标题,结果发现了“串行总线控制器总是感叹号”的关联问题。正好办公室电脑都装有teamviwer常用来远程办公(在家偷懒)。所以通过远程发现电脑室可以运行的。并在控制面板发现:通用串行总线控制器总是感叹号,插入外设时USB无反应。如图:​ 并且右键选中其中一个,点击最后一个选项:“属性” 可以发现“设备状态”中会提示“由...

xiao_bai_0_0的博客 2万+

2024广东省职业技能大赛云计算——集群部署GitLab

题目是这样的:在Kubernetes集群中新建命名空间gitlab-ci,将GitLab部署到该命名空间下,Deployment和Service名称均为gitlab,以NodePort方式将80端口对外暴露为30880,设置GitLab服务root用户的密码为admin@123,将项目包demo-2048.tar.gz导入到GitLab中并命名为demo-2048。GitLab是一个功能强大且灵活的 DevOps 平台,为开发团队和企业提供了从代码管理到持续集成、交付和部署的一整套解决方案。

kuuuugua的博客 4396

ACM题目整理

并查集: poj 2492 就是不能在相同的集合中再次添加相同的点,就是并查集的简单应用,使用并查集判断是否出现过这个元素。 题解链接:点击这里 HUD 3461 codelock 有一个长n的字符串锁,求这个锁有多少种不同的解锁方式,这个锁有若干个区间能够转动,两个能通过转动互相到达的情况属于同一种解锁方式。所以题目就是求区间的个数了。 题解链接:点击这里 ZOJ 3261 ...

邵光亮的博客 15万+

SMILES:化学结构的线性表示方法

SMILES:化学结构的线性表示方法

jasminefeng的博客 1万+

天天写算法POJ的The k-th Largest Group

今天写到一个题把我卡住了,用树形数组求第k大值。一时想不明白,搜了一下发现了这个题的两种做法,一个是logn*logn查询复杂度的,一个是logn复杂度的,都是查找第k大组。不过网上的代码注释也太不负责任了,我看了一个小时都没看明白,最后终于看懂了他的大概意思,我在这里翻译一波#include &lt;stdio.h&gt; #define MAXN 300000 int a[MAXN], c...

qq_36616268的博客 175

Halcon实战:5分钟搞定线序颜色检测(附完整代码解析)

本文详细介绍了如何使用Halcon在5分钟内实现工业级线序颜色检测的高效方案。通过机器视觉技术,结合实战项目经验,提供完整的代码解析和优化技巧,帮助开发者快速构建鲁棒性强、准确率高的检测系统,适用于电子制造和汽车线束等行业。

weixin_29098367的博客 441

【WRF工具】WRF 模型输出可视化工具 plotfmt

【WRF工具】WRF 模型输出可视化工具 plotfmt

WW、forever的博客 1292

pku2985 The k-th Largest Group

题意:初始化状态为N个含单一元素的集合,动态合并任意两个集合,查询第ith大的集合的大小 分析:以虚二叉树做辅助结构找出第ith大的集合的大小 #include<iostream> #include<algorithm> usingnamespacestd; #defineMAXN200001 intv[MAXN],N,M,pn...

weixin_30608503的博客 107

Unity零基础到入门 ☀️| 轻松学会 Unity界面布局和简单实例——入门级!(^_−)☆

入门级Unity知识,一起加油呀!

努力前行,总会成为自己心中的那道光 1万+

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

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

POJ2985 The k-th Largest Group(Splay)

有n组猫,m种操作。初始的时候每组猫有一只,有两种操作,可以把两组猫合并为一组,或者查询猫数第k多的组。 对于合并猫我们开一个并查集,检查那些已经在一个集合中的猫。首先在splay树中插入每组猫的数,当合并的时候,就从树中删去那两组猫,在插入它们的和。为了方便删除,在初始化的时候要插入0和n+1两个节点。 #include #include #define MAXN 200010 void G

ACMer_quack&cheer 482

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

OI笔录

文章目录二月一日 并查集+堆二月2日 BM & KMP & TRIE & AUTO_ACFebr,3rd——AUTO_AC2.4 RMQ / LCA / 树链剖分 / 线段树二月五日 RMQ & LCA / 树链剖分 / 线段树2/6/2020 线段树 / 树状数组 ----- 共 & 异2-7-2020 平衡树(划掉)treap元宵节AnKang 平...

forto42的博客 716

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

[Treap]poj2985 The k-th Largest Group

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

_Evolution的博客 367

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 Largest Group 树状数组 求第k大

题目链接:POJ - 2985 The k-th Largest Group 利用树状数组前缀和特性(能求出某个数前边有多少个数比他小),将求第K大的数转换为求第 (num-k+1)小的数  num为数的个数。 一开始每个组都只有一只猫,所以一共有n组,此时 c[1]=n (假设 c[ ] 为树状数组),表示只含一只猫的有n组。我们只需要根据原数组 a[ ] (一开始每组只有一只猫所以初始化全...

没有梦想何以远行 275

POJ-2985-The k-th Largest Group

第一次用树状数组求第k大值,其实思想就是统计比现在小的个数,然后用二分进行查找, 感觉比划分树简单多了 代码: #include #include #include using namespace std; const int maxn=200010; int n,m,t[maxn],p[maxn],num[maxn]; int find(int x) { if(p[x]==-1)

z309241990的专栏 879

(POJ-2985)The k-th Largest Group(并查集+树状数组)

题目链接:2985 -- The k-th Largest Group 大致题意:就是一开始给你n个集合,每个集合里面有一个元素,然后有m次操作,每次操作有两种可能,一种是查询当前所有集合中第k大的集合的大小,也就是所有集合内部的元素个数第k大的集合的元素个数,另一种是合并某两个集合,合并后的集合将变为原来两个集合的大小之和,只有进行询问操作时会给出输出。 分析:看到合并集合我们不难想到用并查集来解决,除此之外我们还需要用一个数组cnt来维护每个集合的大小,当然这都是一些较为基础的想法,在这里再提醒

AC__dream的博客 386

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

[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

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

poj1985 The k-th Largest Group

The k-th Largest GroupTime Limit: 2000MS Memory Limit: 131072KTotal Submissions: 9577 Accepted: 3117DescriptionNewman likes playing with cats. He possesses lots of cats in his home. Because the number...

qq_41510496的博客 338

POJ2985 The k-th Largest Group

并查集 + 树状数组求第k #include #include #include using namespace std; int const MAXN = 200010; int n,m; int c[MAXN],father[MAXN],cnt[MAXN]; void Init(){     for(int i = 1;i         father[i] = i;

z8853797的专栏 720
上一篇: Teamwork Gym - 101492E 基础dp
下一篇: Gym 101201F Illumination 2-sat+ G - Maximum Islands Gym - 101201G二分图染色+匹配
sega_handsome
博客等级 码龄10年 7粉丝 164原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值