【bzoj3545】peaks
离线一下,动态开点+线段树合并,然后权值线段树上询问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的更多相关文章
- 【BZOJ3545】Peaks(Kruskal重构树 主席树)
题目链接 大意 给出有\(N\)个点\(M\)条边的一张图,其中每个点都有一个High值,每条边都有一个Hard值. 再给出\(Q\)个询问:\(v\) \(x\) \(k\) 每次询问查询从点\(v ...
- 【bzoj3545】[ONTAK2010]Peaks 线段树合并
[bzoj3545][ONTAK2010]Peaks 2014年8月26日3,1512 Description 在Bytemountains有N座山峰,每座山峰有他的高度h_i.有些山峰之间有双向道路 ...
- 【BZOJ3551】Peaks加强版(Kruskal重构树,主席树)
[BZOJ3551]Peaks加强版(Kruskal重构树,主席树) 题面 BZOJ Description 在Bytemountains有N座山峰,每座山峰有他的高度h_i.有些山峰之间有双向道路相 ...
- 【BZOJ3545】 [ONTAK2010]Peaks
BZOJ3545 [ONTAK2010]Peaks Solution 既然会加强版,直接把强制在线的操作去掉就好了. 代码实现 #include<stdio.h> #include< ...
- 【BZOJ3551】【BZOJ3545】 【ONTAK2010】 Peaks (kruskal重构树+主席树)
Description 在\(Bytemountains\)有\(~n~\)座山峰,每座山峰有他的高度\(~h_i~\). 有些山峰之间有双向道路相连,共\(~m~\)条路径,每条路径有一个困难值 ...
- 【JZOJ3635】【BOI2012】Peaks
╰( ̄▽ ̄)╭ 有一个居住在多山岛屿的登山家,已经攀上了一座山峰,并且要攀爬另外一座更高的山峰. 更精确地说,岛上的每一点都有一个大于零的海拔(海面的海拔为零),并且如果登山家位于海拔Ei的山峰上,那 ...
- 【BZOJ3551】[ONTAK2010]Peaks加强版 最小生成树+DFS序+主席树
[BZOJ3545][ONTAK2010]Peaks Description 在Bytemountains有N座山峰,每座山峰有他的高度h_i.有些山峰之间有双向道路相连,共M条路径,每条路径有一个困 ...
- 【转载】MATLB绘图
原文地址:http://www.cnblogs.com/hxsyl/archive/2012/10/10/2718380.html 作为一个功能强大的工具软件,Matlab具有很强的图形处理功能,提供 ...
- 【OS】NMON的简介和使用
[OS]NMON的简介和使用 目前NMON已开源,以sourceforge为根据地,网址是http://nmon.sourceforge.net. 1. 目的 本文介绍操作系统监控工具Nmon的概念. ...
随机推荐
- Django 2.0 学习(10):Django 定制化
定制化admin表单 通过使用admin.site.register(Question)注册Question模型,Django可以构造默认的表单.通常,可以通过对象的注册机制来告诉Django我们想要 ...
- openstack中间件message queue 与memcached环境部署
为什么要安装中间件 组件间的通信使用的是REST API 而组件内部之间的通信则是使用的中间件 首先登陆openstack的官网查看官方文档 www.openstack.org 应为在部署一个架构之前 ...
- P3065 [USACO12DEC]第一!First!
题目描述 Bessie has been playing with strings again. She found that by changing the order of the alphabe ...
- BZOJ3994:[SDOI2015]约数个数和——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=3994 https://www.luogu.org/problemnew/show/P3327#sub ...
- BZOJ1090:[SCOI2003]字符串折叠——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1090 Description 折叠的定义如下: 1. 一个字符串可以看成它自身的折叠.记作S=S 2 ...
- HDU3652:B-number——题解
http://acm.hdu.edu.cn/showproblem.php?pid=3652 题目大意:给一个数n,求1-n所有满足下列条件的数的个数: 1.包含一个子串为“13” 2.能被13整除. ...
- [Leetcode] restore ip address 存储IP地址
Given a string containing only digits, restore it by returning all possible valid IP address combina ...
- javascript push 和 concat 的区别
array.push(item1,item2,item3...) array.concat(item1,item2,item3...) 1. push和concat的元素都既可以是普通元素(任意类型) ...
- cloneNode与事件拷贝
用法: var newNode = oldNode.cloneNode(deep); //deep,布尔值,若为true,则克隆oldNode及其子节点,否则只克隆oldNode本身 关于复制事件 1 ...
- cuda环境下安装opencv出现nvcc warning : The 'compute_11'
警告打印: nvcc warning : The 'compute_11', 'compute_12', 'compute_13', 'sm_11', 'sm_12', and 'sm_13' arc ...