bzoj3545 Peaks 线段树合并
离线乱搞。。。
也就是一个线段树合并没什么
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int n,m,q,tot,cnt,num,h[100001],a[100001],ans[500001],fa[100001],root[100001];
struct edge{
int u,v,cost;
bool operator < (const edge &b) const{
return cost<b.cost;
}
}e[500001];
struct Que{
int id,v,x,k;
bool operator < (const Que &b) const{
return x<b.x;
}
}que[500001];
struct node{
int lch,rch,siz;
}tree[2000001];
int find(int x){
if(fa[x]==x)return x;
return fa[x]=find(fa[x]);
}
void insert(int o,int l,int r,int x){
tree[o].siz++;
if(l==r)return;
int mid=(l+r)>>1;
if(x<=mid){
if(!tree[o].lch)tree[o].lch=++num;
insert(tree[o].lch,l,mid,x);
}
if(x>mid){
if(!tree[o].rch)tree[o].rch=++num;
insert(tree[o].rch,mid+1,r,x);
}
}
int query(int o,int l,int r,int k){
if(k<=0 or k>tree[o].siz)return -1;
if(l==r)return l;
int mid=(l+r)>>1;
if(k<=tree[tree[o].lch].siz)return query(tree[o].lch,l,mid,k);
return query(tree[o].rch,mid+1,r,k-tree[tree[o].lch].siz);
}
int merge(int x,int y){
if(!x or !y)return x+y;
tree[x].siz+=tree[y].siz;
tree[x].lch=merge(tree[x].lch,tree[y].lch);tree[x].rch=merge(tree[x].rch,tree[y].rch);
return x;
}
int main(){
scanf("%d%d%d",&n,&m,&q);
for(int i=1;i<=n;i++){
scanf("%d",&h[i]);
a[i]=h[i];fa[i]=i;
}
sort(a+1,a+n+1);
for(int i=1;i<=n;i++)h[i]=lower_bound(a+1,a+n+1,h[i])-a;
for(int i=1;i<=m;i++){
scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].cost);
}
sort(e+1,e+m+1);
for(int i=1;i<=q;i++){
scanf("%d%d%d",&que[i].v,&que[i].x,&que[i].k);que[i].id=i;
}
for(int i=1;i<=n;i++){
fa[i]=i;
root[i]=++num;
insert(root[i],1,n,h[i]);
}
sort(que+1,que+q+1);
for(int i=1;i<=q;i++){
while(cnt<m and e[cnt+1].cost<=que[i].x){
int fx=find(e[++cnt].u);
int fy=find(e[cnt].v);
if(fx==fy)continue;
fa[fx]=fy;
root[fy]=merge(root[fx],root[fy]);
}
int rot=root[find(que[i].v)],ret=query(rot,1,n,tree[rot].siz-que[i].k+1);
ans[que[i].id]=~ret?a[ret]:ret;
}
for(int i=1;i<=q;i++){
printf("%d\n",ans[i]);
}
return 0;
}
bzoj3545 Peaks 线段树合并的更多相关文章
- Peaks 线段树合并
Peaks 线段树合并 \(n\)个带权值\(h_i\)山峰,有\(m\)条山峰间双向道路,\(q\)组询问,问从\(v_i\)开始只经过\(h_i\le x\)的路径所能到达的山峰中第\(k\)高的 ...
- 【bzoj3545】[ONTAK2010]Peaks 线段树合并
[bzoj3545][ONTAK2010]Peaks 2014年8月26日3,1512 Description 在Bytemountains有N座山峰,每座山峰有他的高度h_i.有些山峰之间有双向道路 ...
- BZOJ.3545.[ONTAK2010]Peaks(线段树合并)
题目链接 \(Description\) 有n个座山,其高度为hi.有m条带权双向边连接某些山.多次询问,每次询问从v出发 只经过边权<=x的边 所能到达的山中,第K高的是多少. \(Solut ...
- 【线段树合并】bzoj3545: [ONTAK2010]Peaks
1A还行 Description 在Bytemountains有N座山峰,每座山峰有他的高度h_i.有些山峰之间有双向道路相连,共M条路径,每条路径有一个困难值,这个值越大表示越难走,现在有Q组询问, ...
- [BZOJ3545] [ONTAK2010]Peaks(线段树合并 + 离散化)
传送门 由于困难值小于等于x这个很恶心,可以离线处理,将边权,和询问时的x排序. 每到一个询问的时候,将边权小于等于x的都合并起来再询问. .. 有重复元素的线段树合并的时间复杂度是nlog^2n # ...
- BZOJ3545 Peaks 离线处理+线段树合并
题意: 在Bytemountains有N座山峰,每座山峰有他的高度h_i.有些山峰之间有双向道路相连,共M条路径,每条路径有一个困难值,这个值越大表示越难走,现在有Q组询问,每组询问询问从点v开始只经 ...
- 线段树合并&&启发式合并笔记
这俩东西听起来很高端,实际上很好写,应用也很多~ 线段树合并 线段树合并,顾名思义,就是建立一棵新的线段树保存原有的两颗线段树的信息. 考虑如何合并,对于一个结点,如果两颗线段树都有此位置的结点,则直 ...
- [XJOI NOI2015模拟题13] C 白黑树 【线段树合并】
题目链接:XJOI - NOI2015-13 - C 题目分析 使用神奇的线段树合并在 O(nlogn) 的时间复杂度内解决这道题目. 对树上的每个点都建立一棵线段树,key是时间(即第几次操作),动 ...
- [BZOJ 2212] [Poi2011] Tree Rotations 【线段树合并】
题目链接:BZOJ - 2212 题目分析 子树 x 内的逆序对个数为 :x 左子树内的逆序对个数 + x 右子树内的逆序对个数 + 跨越 x 左子树与右子树的逆序对. 左右子树内部的逆序对与是否交换 ...
随机推荐
- PHP 官方说明
http://php.net/manual/en/mysqli.affected-rows.php The above examples will output: Affected rows (INS ...
- jquery + ajax 实现多条件查询
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="JquerySort.aspx. ...
- Hadoop YARN学习之监控集群监控Nagios(4)
doop YARN学习之监控集群监控Nagios(4) 1. Nagios是一个流行的开源监控工具,可以用来监控Hadoop集群. 2. 监控基本的Hadoop服务 调试好脚本后命名为chek_res ...
- avd manager或sdk manager无法打开
最近开始搞安卓,使用AS启动项目时老是报各种错误,而网上这方面的资料很多都解决不了.只能边实验边做. 定位到avd manager或sdk manager无法打开,网上找了很多资料,都不能解决,知道看 ...
- mysql 判断字符串是否为其他字符串的子集
1.mysql 提供单个用逗号隔开判断某个字符串是否包含在其他字符串的之内:FIND_IN_SET('需要匹配的字符串','源字符串'); demo: select FIND_IN_SET('111' ...
- (一)Redis for Windows正确打开方式
目录 (一)Redis for Windows正确打开方式 (二)Redis for 阿里云公网连接 (三)Redis for StackExchange.Redis 下载地址 官网.中文网1 及 中 ...
- 迅为i.MX6Q嵌入式开发板
工业级核心板:核心板10层高速PCB设计,充分保证电磁兼容. 01. 处理器:开发板默认是四核商业扩展级芯片,可根据用户需求更换单核.双核.工业级.汽车级处理器,批量更省成本. 02. 扩展引脚:32 ...
- vue工厂化完整项目目录
- PowerDesigner连接MySQL数据库
详细步骤请点击下面的链接查看! 我在网上找了很多篇教程, 其中这一篇是最好的. 可以成功的帮助我们把PowerDesigner和MySQL数据库相连. PowerDesigner真的非常强大! 设计数 ...
- JSP的九大对象和四大作用域
1.JSP中九大内置对象为: request 请求对象 类型 javax.servlet.ServletRequest 作用域 Request ...