题目


分析

和主席树不同的是,线段树合并后原树的信息不会保留,

这样就保证空间和常数都比较小,这题比较裸,直接上代码


代码

#include <cstdio>
#include <cctype>
#define rr register
using namespace std;
const int N=100011; int Tree_Tot;
int n,m,rt[N],w[N*20],p[N*20];
int Ls[N*20],Rs[N*20],f[N];
inline signed iut(){
rr int ans=0; rr char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans;
}
inline void print(int ans){
if (ans>9) print(ans/10);
putchar(ans%10+48);
}
inline signed getf(int u){return f[u]==u?u:f[u]=getf(f[u]);}
inline signed update(int k,int l,int r,int x,int z){
if (!k) k=++Tree_Tot;
if (l==r) {w[k]=1,p[k]=z; return k;}
rr int mid=(l+r)>>1;
if (x<=mid) Ls[k]=update(Ls[k],l,mid,x,z);
else Rs[k]=update(Rs[k],mid+1,r,x,z);
w[k]=w[Ls[k]]+w[Rs[k]];
return k;
}
inline signed Merge(int fi,int se,int l,int r){
if (!fi||!se) return fi|se;
if (l==r) {if (p[se]) p[fi]=p[se],w[fi]+=w[se]; return fi;}
rr int mid=(l+r)>>1;
Ls[fi]=Merge(Ls[fi],Ls[se],l,mid);
Rs[fi]=Merge(Rs[fi],Rs[se],mid+1,r);
w[fi]=w[Ls[fi]]+w[Rs[fi]];
return fi;
}
inline signed query(int k,int l,int r,int kth){
if (w[k]<kth||!k) return 0;
if (l==r) return p[k];
rr int mid=(l+r)>>1;
if (kth<=w[Ls[k]]) return query(Ls[k],l,mid,kth);
else return query(Rs[k],mid+1,r,kth-w[Ls[k]]);
}
signed main(){
n=iut(); m=iut();
for (rr int i=1;i<=n;++i)
f[i]=i,rt[i]=update(rt[i],1,n,iut(),i);
for (rr int i=1;i<=m;++i){
rr int fa=getf(iut()),fb=getf(iut());
if (fa==fb) continue;
if (fa>fb) fa^=fb,fb^=fa,fa^=fb;
f[fa]=fb,rt[fb]=Merge(rt[fb],rt[fa],1,n);
}
for (rr int Q=iut();Q;--Q){
rr char c=getchar();
while (c!='B'&&c!='Q') c=getchar();
if (c=='B'){
rr int fa=getf(iut()),fb=getf(iut());
if (fa==fb) continue;
if (fa>fb) fa^=fb,fb^=fa,fa^=fb;
f[fa]=fb,rt[fb]=Merge(rt[fb],rt[fa],1,n);
}else{
rr int x=getf(iut()),kth=iut();
rr int t=query(rt[x],1,n,kth);
if (!t) printf("-1"); else print(t);
putchar(10);
}
}
return 0;
}

#线段树合并#洛谷 3224 [HNOI2012]永无乡的更多相关文章

  1. 洛谷.3224.[HNOI2012]永无乡(Splay启发式合并)

    题目链接 查找排名为k的数用平衡树 合并时用启发式合并,把size小的树上的所有节点插入到size大的树中,每个节点最多需要O(logn)时间 并查集维护连通关系即可 O(nlogn*insert t ...

  2. 洛谷 P3224 [HNOI2012]永无乡 解题报告

    P3224 [HNOI2012]永无乡 题目描述 永无乡包含 \(n\) 座岛,编号从 \(1\) 到 \(n\) ,每座岛都有自己的独一无二的重要度,按照重要度可以将这 \(n\) 座岛排名,名次用 ...

  3. 洛谷P3224 [HNOI2012]永无乡(线段树合并+并查集)

    题目描述 永无乡包含 nnn 座岛,编号从 111 到 nnn ,每座岛都有自己的独一无二的重要度,按照重要度可以将这 nnn 座岛排名,名次用 111 到 nnn 来表示.某些岛之间由巨大的桥连接, ...

  4. 2018.08.11 洛谷P3224 [HNOI2012]永无乡(线段树合并)

    传送门 给出n个带点权的点,支持连边和查询连通块第k大. 这个貌似就是一道线段树合并的裸板啊... 代码: #include<bits/stdc++.h> #define N 100005 ...

  5. 洛谷 P3224 [HNOI2012]永无乡

    题面 永无乡包含 \(n\) 座岛,编号从 \(1\) 到 \(n\) ,每座岛都有自己的独一无二的重要度,按照重要度可以将这 \(n\) 座岛排名,名次用 \(1\) 到 \(n\) 来表示.某些岛 ...

  6. [洛谷P3224][HNOI2012]永无乡

    题目大意:给你$n$个点,每个点有权值$k$,现有两种操作: 1. $B\;x\;y:$将$x,y$所在联通块合并2. $Q\;x\;k:$查询第$x$个点所在联通块权值第$k$小是哪个数 题解:线段 ...

  7. [Luogu 3224] HNOI2012 永无乡

    [Luogu 3224] HNOI2012 永无乡 特别水一个平衡树题. 不认真的代价是调试时间指数增长. 我写的 SBT,因为 Treap 的 rand() 实在写够了. 用并查集维护这些点的关系, ...

  8. 【洛谷P3224】永无乡 并查集+Splay启发式合并

    题目大意:给定 N 个点的图,点有点权,初始有一些无向边,现在有 Q 个询问,每个询问支持动态增加一条无向边连接两个不连通的点和查询第 X 个点所在的联通块中权值第 K 大的是哪个点. 题解:学会了平 ...

  9. B20J_2733_[HNOI2012]永无乡_权值线段树合并

    B20J_2733_[HNOI2012]永无乡_权值线段树合并 Description:n座岛,编号从1到n,每座岛都有自己的独一无二的重要度,按照重要度可以将这n座岛排名,名次用1到 n来表示.某些 ...

  10. [HNOI2012]永无乡 线段树合并

    [HNOI2012]永无乡 LG传送门 线段树合并练手题,写这篇博客只是为了给我的这篇文章找个板子题. 并查集维护连通性,对于不在同一个连通块内的合并操作每次直接合并两颗线段树,复杂度\(O(n \l ...

随机推荐

  1. node版本管理工具nvm的安装及使用

    一.什么是nvm nvm是一个node版本管理工具. 由于不同项目依赖的node版本可能不同,所以在维护多个项目时通常需要使用不同的node版本,这时候用nvm来切换不同的node版本就很方便. 官方 ...

  2. zookeeper运行时dos窗口一闪而过

    错误:从官网下载zookeeper解压到本地之后,鼠标双击运行zkServer.cmd文件,dos窗口一闪而过,看不到错误原因: 解决方法:通过dos窗口执行zkServer.cmd文件,对应的错误信 ...

  3. 【LeetCode回溯算法#05】分割回文串(复习双指针判断回文以及substr函数使用记录)

    分割回文串 力扣题目链接 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 .返回 s 所有可能的分割方案. 回文串 是正着读和反着读都一样的字符串. 示例 1: 输入:s = ...

  4. Java纯手打web服务器(一)

    目录 在主线程中进行等待客户端请求: 这里主要说下解析流程: 在主线程中进行等待客户端请求: public static void main(String[] args) { HttpServer1 ...

  5. 【App Service for Windows】为 App Service 配置自定义 Tomcat 环境

    问题描述 当在App Service for Windows环境中所列出的Tomcat Version 没有所需要的情况下,如何实现自定义Tomcat 环境呢? 问题解答 第一步: 从官网下载要使用的 ...

  6. 当 GraphQL 遇上图数据库,便有了更方便查询数据的方式

    人之初,性本鸽. 大家好,我叫储惠龙(实名上网),你可以叫我小龙人,00 后一枚.目前从事后端开发工作. 今天给大家带来一个简单的为 NebulaGraph 提供 GraphQL 查询支持的 DEMO ...

  7. harbor 安装

    下载地址: https://github.com/goharbor/harbor/releases?page=1 下载了多个版本,发现仅v1.10.17版本支持GC清理,所以这里安装的v1.10.17 ...

  8. iview table 左侧固定列 右侧固定列 滚动的时候 表格错位 解决方案

    iview table 左侧固定列 右侧固定列 滚动的时候 表格错位 解决方案 iview table 滚动条位置重置 https://www.jianshu.com/p/32fcd50489ff

  9. FIR滤波器的设计和实现

    FIR的作用和价值   FIR(Finite Impulse Response)滤波器:有限长单位冲激响应滤波器,又称为非递归型滤波器,是数字信号处理系统中最基本的元件,它可以在保证任意幅频特性的同时 ...

  10. CentOS 7.9 环境下搭建k8s集群(一主两从)

    目录 一.硬件准备(虚拟主机) 二.环境准备 1.所有机器关闭防火墙 2.所有机器关闭selinux 3.所有机器关闭swap 4.所有机器上添加主机名与ip的对应关系 5.在所有主机上将桥接的ipv ...