#include<bits/stdc++.h>
#define N 100005
using namespace std;
int n,m,q;
int a[N],pre[N];
int rt[N],lc[N],rc[N],sz[N];
int find(int x)
{
return x==pre[x] ? x : find(pre[x]);
}
void up(int u)
{
sz[u]=sz[lc[u]]+sz[rc[u]]+1;
}
void clear(int u)
{
sz[u]=lc[u]=rc[u]=0;
}
void lrot(int &u)
{
int t=rc[u];
rc[u]=lc[t];
lc[t]=u;
up(u);
up(t);
u=t;
}
void rrot(int &u)
{
int t=lc[u];
lc[u]=rc[t];
rc[t]=u;
up(u);
up(t);
u=t;
}
void mant(int &u)
{
if(sz[lc[lc[u]]]>sz[rc[u]]) rrot(u);
if(sz[rc[rc[u]]]>sz[lc[u]]) lrot(u);
}
void ins(int &u,int x)
{
if(!u) u=x;
else
{
if(a[x]<=a[u]) ins(lc[u],x);
else ins(rc[u],x);
}
sz[u]++;
}
void merg(int u,int v)
{
if(lc[v]) merg(u,lc[v]);
if(rc[v]) merg(u,rc[v]);
clear(v);
ins(rt[u],v);
mant(rt[u]);
}
void merge(int x,int y)
{
x=find(x),y=find(y);
if(sz[rt[x]]<sz[rt[y]]) swap(x,y);
if(x!=y) pre[y]=x, merg(x,rt[y]);
}
int sele(int u,int k)
{
int t=sz[lc[u]]+1;
if(k<t) return sele(lc[u],k);
if(k>t) return sele(rc[u],k-t);
return u;
}
int main()
{
int x,y;
char c;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
pre[i]=i;
ins(rt[i],i);
}
while(m--)
{
scanf("%d%d",&x,&y);
merge(x,y);
}
scanf("%d",&q);
while(q--)
{
scanf("\n%c%d%d",&c,&x,&y);
if(c=='B') merge(x,y);
else
{
x=find(x);
if(y>sz[rt[x]]) puts("-1");
else printf("%d\n",sele(rt[x],y));
}
}
}相关推荐
汽车电子电气架构诊断功能开发全流程解析
文章作者是一位在魔都工作的汽车电子工程师,坚持长期主义,并分享了一段关于“钝感力”的文字,强调面对困境的韧劲和耐力,以及不被外界噪音干扰的重要性。文章详细介绍了汽车电子电气架构(EEA)的诊断功能开发流程,涵盖设计、实现、生产、运维及售后五大环节。作者从技术实现维度展开,详细描述了诊断系统架构设计、供应商功能实现、产线集成与标定、云端数据交互以及售后诊断应用场景。文章还总结了技术演进趋势,包括AI融合、OTA 2.0和区块链应用等,强调了标准化协议与工具链在全链路诊断能力中的重要性。最后,作者鼓励读者相信时
洛谷P3224 [HNOI2012]永无乡 线段树合并
题面 题解: 线段树合并的好题。在这题中我们可以用并查集维护连通块,因为要统计第k大,所以还可以用线段树合并来统计子树之间的信息。 坑点:1:注意炸内存 2:最后输出的是编号,要存起来 3:注意值域线段树中查询第k大的写法 代码如下: #include<cstdio> using namespace std; const int N=5000005; ...
Android 默认授予所有应用权限以及特殊权限处理
PackageManagerService作为android的主要系统服务之一,包含处理应用权限相关的职责。源码地址如下:在PMS成功启动时并收到回掉systemReady回进行应用权限授予。DefaultPermissionGrantPolicy为权限处理策略管理类。这里并没有赋予所有系统应用权限,所以当进行应用时还是会显示权限检查的弹框。可通过此方法进行所有应用权限赋予:如果不想所有应用都授予权限,可考虑在system/etc下的权限相关xml文件添加应用包名和所需权限。
[HNOI2012]永无乡【平衡树】【并查集】【启发式合并】
>Link luogu P3224 >Description 给出nnn个点,进行qqq次操作: 操作1:把两个点连起来 操作2:询问与xxx相连通的点中valvalval第yyy大的是哪个点 1≤m≤n≤105,1≤q≤3×1051 \leq m \leq n \leq 10^5 ,1≤q≤3×10^51≤m≤n≤105,1≤q≤3×105 >解题思路 感觉这道紫题还蛮友好的QAQ 相连通肯定用并查集,动态插入点+询问第kkk大就是用平衡树了 并查集如何把两棵平衡树并在一起? 就
Keil 丢失编译器版本5、内核文件core_cm3.c报错
若用的是旧版本的core_cm3.c ,就使用编译器v5编译工程;若想用编译器v6,就更新4个相关的内核文件:(CMSIS:Cortex Microcontroller Software Interface Standard,ARM Cortex™ 微控制器软件接口标准)
Cloudflare 5秒盾逆向实战:13次请求背后的Python补环境框架搭建指南
本文深入解析了如何通过Python构建浏览器环境模拟框架,以应对Cloudflare 5秒盾等现代Web防护机制。文章详细拆解了其背后复杂的13次请求链,涵盖了JavaScript执行引擎集成、DOM事件模拟、网络请求控制及Canvas指纹等环境检测的完整实现方案,为自动化数据采集和逆向工程提供了实战指南。
洛谷 P3224 [HNOI2012]永无乡(并查集+线段树合并+树上二分)
原题链接 很模板的一道线段树合并 开始时,我们对于每一个点都开一棵线段树,储存每一种权值的点在此连通块出现的次数并用并查集维护连通块的信息 对于接下来的每一次加边,将两连通块对应的线段树合并,并更新并查集中的连通情况 查询时,树上二分即可 #include<cstdio> #include<iostream> using namespace std; const int Maxn=100000+10; const int Maxm=5000000+10; int a[Maxn],ro
保姆级教程:Windows下用GDC-Client下载TCGA数据,从环境变量配置到成功下载
本文提供Windows平台下使用GDC-Client下载TCGA数据的完整教程,从环境变量配置到成功下载。详细介绍了GDC-Client工具的安装、系统环境变量设置、配置文件优化以及数据下载实战技巧,帮助生物信息学研究者高效获取TCGA数据库中的癌症基因组数据。
2018.08.11 洛谷P3224 [HNOI2012]永无乡(线段树合并)
传送门 给出n个带点权的点,支持连边和查询连通块第k大。 这个貌似就是一道线段树合并的裸板啊。。。 代码: #include<bits/stdc++.h> #define N 100005 using namespace std; inline int read(){ int ans=0; char ch=ge...
嵌入式u-boot最全面试题及参考答案(5万字长文持续更新)
例如,在一个便携式设备中,U-Boot 在启动时初始化电源控制器,将输出电压设置为合适的值。命令是u-boot构建过程中用于配置u-boot选项的命令。在嵌入式系统中,启动画面(也称为启动Logo或Splash Screen)是展示给用户的第一印象,它可以包含公司的标志、产品的名称或其他相关信息。u-boot允许通过环境变量来进行配置,这使得开发者可以根据不同的硬件平台和项目需求灵活地调整u-boot的行为。写入操作可以是字节级别的,也可以是块级别的,具体取决于设备的性能和操作系统的需求。
【Unity实战篇 】| 游戏中实现镂空遮罩效果【矩形、圆形镂空遮罩】
本文来写一下怎样在Unity中完成一个 镂空遮罩 的效果。 镂空遮罩 比较常用的有两种:矩形镂空遮罩、圆形镂空遮罩。 镂空遮罩 在游戏中常被当做新手引导必备的内容,可以给玩家更多不一样的体验。 下面就一起来看一下怎样做出这种效果吧!
BZOJ2733: [HNOI2012]永无乡(洛谷P3224)
平衡树 BZOJ题目传送门 洛谷题目传送门 平衡树启合裸题。 刚开始把所有节点当成一棵树,每次把小的树合并到大的上,时间复杂度为O(nlog2n)O(nlog2n)O(n\log^2n)。 判断是否连通的话用并查集就好了。 代码: #include&lt;cctype&gt; #include&lt;cstdio&gt; #include&lt;cstring&gt; #inclu...
Autosar MCAL-S32k324 Crypto配置-基于EB
NXP官网提供了免费的HSE固件,同时也提供了对应的协议栈。本文以算法为例,介绍MCAL相关的配置及在代码中的集成与使用。使用HSE计算,比软件算法确实方便许多。后面会完善更多的算法测试。
洛谷P3224【HNOI2012】永无乡
### 题目大意 有$n$个点,每个点都有一个重要度。先连接$m$条边,然后有$q$次操作: `B x y` 表示连接点$x$和点$y$ `Q x k` 表示询问当前与点 $x$ 连通的所有点中第 $k$ 重要的是哪个点
Statistics and Machine Learning Toolbox
Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具
精雕软件(JDpaint) 5.5 绿色版
精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版
BZOJ 2733 | 洛谷 P3224 [HNOI2012]永无乡
https://www.lydsy.com/JudgeOnline/problem.php?id=2733 https://www.luogu.org/problemnew/show/P3224 C++版本一 题解:线段树+并查集+线段树合并 用并查集维护连通性,每个连通块内建一棵权值线段树,操作只有合并俩线段树以及查询排名 /* *@Author: STZG *@Language...
win10 跳过U8环境检测的IE WebControls.rar
win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。
洛谷P3224 [HNOI2012]永无乡
P3224 [HNOI2012]永无乡 转载于:https://www.cnblogs.com/thmyl/p/7359287.html
迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)
迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)
洛谷 P3224 [HNOI2012]永无乡 解题报告
P3224 [HNOI2012]永无乡 题目描述 永无乡包含 \(n\) 座岛,编号从 \(1\) 到 \(n\) ,每座岛都有自己的独一无二的重要度,按照重要度可以将这 \(n\) 座岛排名,名次用 \(1\) 到 \(n\) 来表示。某些岛之间由巨大的桥连接,通过桥可以从一个岛到达另一个岛。如果从岛 \(a\) 出发经过若干座(含 \(0\) 座)桥可以 到达岛 \(b\) ,则称岛 \(a\...
洛谷 P3224 [HNOI2012]永无乡 线段树合并
题意:不断联通一个图,问每个联通块里排名第k的***原来编号*** #include<bits/stdc++.h> #define ll long long using namespace std; const ll maxn =1e5+10; const ll maxm=maxn *67; ll rd() {ll t;scanf("%lld",&t);return t;}...
洛谷P3224 [HNOI2012]永无乡 线段树合并模板
题意: Q 查询与x连通的第k小B 将两个集合连通 做法:求集合第k小->值域线段树 集合连通关系->并查集维护 合并集合->线段树合并 注意:线段树的下标是值域 id存储的是 以线段树节点为下标 题中对应的点标号 query中返回的是 那个点的标号 而 l r 是对应的值域 此题值域小 不需要离散化 一定要分清 点标号 值域 与线段树中的点 #i...
[洛谷P3224][HNOI2012]永无乡
题目大意:给你$n$个点,每个点有权值$k$,现有两种操作: 1. $B\;x\;y:$将$x,y$所在联通块合并2. $Q\;x\;k:$查询第$x$个点所在联通块权值第$k$小是哪个数 题解:线段树合并,权值线段树上二分即可 卡点:无 C++ Code: #include <cstdio> #include <cctype> namespace ...
【洛谷P3224】【HNOI2012】—永无乡(线段树合并)
传送门 线段树合并板子题 线段树合并的复杂度要根据两颗树的相似度而定的 又因为一颗线段树的值域确定了,其形状也就确定了(只要你是好好写的lll,mid,mid,mid,rrr) 这道题中每个岛的重要度都不同 所以把所有岛构成的权值线段树一个个合并的复杂度总计也只有O(nlogn)O(nlogn)O(nlogn) 而两颗完全一样的线段树合并复杂度单次就有O(nlogn)O(nlogn)O(nlogn...
1220



被折叠的 条评论
为什么被折叠?



