离线一下,动态开点+线段树合并,然后权值线段树上询问kth即可。

#include<bits/stdc++.h>
const int N=;
const int M=*;
using namespace std;
int n,m,q,ans[N],rt[N],a[N],fa[N],cnt=;
inline int read(){
int f=,x=;char ch;
do{ch=getchar();if(ch=='-')f=-;}while(ch<''||ch>'');
do{x=x*+ch-'';ch=getchar();}while(ch>=''&&ch<='');
return f*x;
}
struct Edge{
int u,v,w;
bool operator <(const Edge &x)const{return w<x.w;}
inline void init(){u=read();v=read();w=read();}
}G[N];
struct Query{
int v,x,k,id;
inline void init(int i){v=read();x=read();k=read();id=i;}
bool operator < (const Query &a)const{return x<a.x;}
}Q[N];
inline int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}
struct Segment_Tree{
int lc[M],rc[M],val[M];
void ins(int &o,int l,int r,int q){
if(!o)o=++cnt;val[o]++;
if(l==r)return;int mid=(l+r)>>;
if(q<=mid)ins(lc[o],l,mid,q);
else ins(rc[o],mid+,r,q);
}
int merge(int x,int y,int l,int r){
if(!x)return y;if(!y)return x;
if(l==r){val[x]+=val[y];return x;}
int mid=(l+r)>>;
lc[x]=merge(lc[x],lc[y],l,mid);
rc[x]=merge(rc[x],rc[y],mid+,r);
val[x]=val[lc[x]]+val[rc[x]];
return x;
}
int kth(int o,int l,int r,int q){
if(l==r)return l;
int mid=(l+r)>>;
if(val[rc[o]]>=q)return kth(rc[o],mid+,r,q);
return kth(lc[o],l,mid,q-val[rc[o]]);
}
}T;
inline void uni(int u,int v){
int x=find(u),y=find(v);
if(x==y)return;
rt[x]=T.merge(rt[x],rt[y],,1e9);
fa[y]=x;
}
int main(){
n=read();m=read();q=read();
for(int i=;i<=n;i++){
a[i]=read();fa[i]=i;T.ins(rt[i],,1e9,a[i]);
}
for(int i=;i<=m;i++)G[i].init();
sort(G+,G+m+);
for(int i=;i<=q;i++)Q[i].init(i);
sort(Q+,Q+q+);
for(int i=,j=;i<=q;i++){
while(j<=m&&G[j].w<=Q[i].x)uni(G[j].u,G[j].v),++j;
int t=rt[find(Q[i].v)];
ans[Q[i].id]=T.val[t]>=Q[i].k?T.kth(t,,1e9,Q[i].k):-;
}
for(int i=;i<=q;i++)printf("%d\n",ans[i]);
}

【bzoj3545】peaks的更多相关文章

  1. 【BZOJ3545】Peaks(Kruskal重构树 主席树)

    题目链接 大意 给出有\(N\)个点\(M\)条边的一张图,其中每个点都有一个High值,每条边都有一个Hard值. 再给出\(Q\)个询问:\(v\) \(x\) \(k\) 每次询问查询从点\(v ...

  2. 【bzoj3545】[ONTAK2010]Peaks 线段树合并

    [bzoj3545][ONTAK2010]Peaks 2014年8月26日3,1512 Description 在Bytemountains有N座山峰,每座山峰有他的高度h_i.有些山峰之间有双向道路 ...

  3. 【BZOJ3551】Peaks加强版(Kruskal重构树,主席树)

    [BZOJ3551]Peaks加强版(Kruskal重构树,主席树) 题面 BZOJ Description 在Bytemountains有N座山峰,每座山峰有他的高度h_i.有些山峰之间有双向道路相 ...

  4. 【BZOJ3545】 [ONTAK2010]Peaks

    BZOJ3545 [ONTAK2010]Peaks Solution 既然会加强版,直接把强制在线的操作去掉就好了. 代码实现 #include<stdio.h> #include< ...

  5. 【BZOJ3551】【BZOJ3545】 【ONTAK2010】 Peaks (kruskal重构树+主席树)

    Description ​ 在\(Bytemountains\)有\(~n~\)座山峰,每座山峰有他的高度\(~h_i~\). 有些山峰之间有双向道路相连,共\(~m~\)条路径,每条路径有一个困难值 ...

  6. 【JZOJ3635】【BOI2012】Peaks

    ╰( ̄▽ ̄)╭ 有一个居住在多山岛屿的登山家,已经攀上了一座山峰,并且要攀爬另外一座更高的山峰. 更精确地说,岛上的每一点都有一个大于零的海拔(海面的海拔为零),并且如果登山家位于海拔Ei的山峰上,那 ...

  7. 【BZOJ3551】[ONTAK2010]Peaks加强版 最小生成树+DFS序+主席树

    [BZOJ3545][ONTAK2010]Peaks Description 在Bytemountains有N座山峰,每座山峰有他的高度h_i.有些山峰之间有双向道路相连,共M条路径,每条路径有一个困 ...

  8. 【转载】MATLB绘图

    原文地址:http://www.cnblogs.com/hxsyl/archive/2012/10/10/2718380.html 作为一个功能强大的工具软件,Matlab具有很强的图形处理功能,提供 ...

  9. 【OS】NMON的简介和使用

    [OS]NMON的简介和使用 目前NMON已开源,以sourceforge为根据地,网址是http://nmon.sourceforge.net. 1. 目的 本文介绍操作系统监控工具Nmon的概念. ...

随机推荐

  1. sqlserver修改sa密码(在windows登陆没有权限的情况下)

    对于windows用户没有权限执行alter login sa enable的情况下,采用如下方法可以成功修改sa密码登陆. . 用Run as a administrator打开命令提示符里输入NE ...

  2. Python替换字符串中的反斜杠\

    s = 'cdp\nd' result = eval(repr(s).replace('\\', '@')) print(result) repr() 函数可以将字符串转换为python的原始字符串( ...

  3. python 深浅copy的例子

    1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象.2. copy.deepcopy 深拷贝 拷贝对象及其子对象一个很好的例子:import copya = [1, 2, 3, ...

  4. Windows系统Unity3D中的快捷键

    Windows系统Unity3D中的快捷键 组合键 键 功能 File 文件 Ctrl   N New Scene 新建场景 Ctrl   O Open Scene 打开场景 Ctrl   S Sav ...

  5. BZOJ4870:[SHOI2017]组合数问题——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=4870 https://www.luogu.org/problemnew/show/P3746 看网上 ...

  6. C++中数组和vector

    本文基于邓俊辉编著<数据结构(C++语言版)(第3版)>.<C++ Primer(第5版)>以及网上的相关博文而写,博主水平有限,若有不妥处,欢迎指出. 一.数组 C++中数组 ...

  7. HDOJ(HDU).1016 Prime Ring Problem (DFS)

    HDOJ(HDU).1016 Prime Ring Problem (DFS) [从零开始DFS(3)] 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架 ...

  8. [BJOI2018]求和

    link 其实可以用$sum(i,j)$表示从$i$到$1$的$k$次方的值,然后就是$lca$的基本操作 注意,能一起干的事情就一起搞,要不会超时 #include<iostream> ...

  9. Eclipse中 properties 文件中 中文乱码

    在.properties文件写注释时,发现中文乱码了,由于之前在idea中有见设置.properties文件的编码类型,便找了找乱码原因 在中文操作系统中,Eclipse中的Java类型文件的编码的默 ...

  10. acm1878欧拉回路

    欧拉回路解释 对于本题我们只要把每个点的度进行记录,判断是否存在奇数度的点,如果是就可以判断不是欧拉回路,如果不是就在一个点出发,进行dfs搜索, 看能否走到起点,因为对于欧拉回路是一个闭合的回路,无 ...