离线乱搞。。。

也就是一个线段树合并没什么

#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 线段树合并的更多相关文章

  1. Peaks 线段树合并

    Peaks 线段树合并 \(n\)个带权值\(h_i\)山峰,有\(m\)条山峰间双向道路,\(q\)组询问,问从\(v_i\)开始只经过\(h_i\le x\)的路径所能到达的山峰中第\(k\)高的 ...

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

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

  3. BZOJ.3545.[ONTAK2010]Peaks(线段树合并)

    题目链接 \(Description\) 有n个座山,其高度为hi.有m条带权双向边连接某些山.多次询问,每次询问从v出发 只经过边权<=x的边 所能到达的山中,第K高的是多少. \(Solut ...

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

    1A还行 Description 在Bytemountains有N座山峰,每座山峰有他的高度h_i.有些山峰之间有双向道路相连,共M条路径,每条路径有一个困难值,这个值越大表示越难走,现在有Q组询问, ...

  5. [BZOJ3545] [ONTAK2010]Peaks(线段树合并 + 离散化)

    传送门 由于困难值小于等于x这个很恶心,可以离线处理,将边权,和询问时的x排序. 每到一个询问的时候,将边权小于等于x的都合并起来再询问. .. 有重复元素的线段树合并的时间复杂度是nlog^2n # ...

  6. BZOJ3545 Peaks 离线处理+线段树合并

    题意: 在Bytemountains有N座山峰,每座山峰有他的高度h_i.有些山峰之间有双向道路相连,共M条路径,每条路径有一个困难值,这个值越大表示越难走,现在有Q组询问,每组询问询问从点v开始只经 ...

  7. 线段树合并&&启发式合并笔记

    这俩东西听起来很高端,实际上很好写,应用也很多~ 线段树合并 线段树合并,顾名思义,就是建立一棵新的线段树保存原有的两颗线段树的信息. 考虑如何合并,对于一个结点,如果两颗线段树都有此位置的结点,则直 ...

  8. [XJOI NOI2015模拟题13] C 白黑树 【线段树合并】

    题目链接:XJOI - NOI2015-13 - C 题目分析 使用神奇的线段树合并在 O(nlogn) 的时间复杂度内解决这道题目. 对树上的每个点都建立一棵线段树,key是时间(即第几次操作),动 ...

  9. [BZOJ 2212] [Poi2011] Tree Rotations 【线段树合并】

    题目链接:BZOJ - 2212 题目分析 子树 x 内的逆序对个数为 :x 左子树内的逆序对个数 + x 右子树内的逆序对个数 + 跨越 x 左子树与右子树的逆序对. 左右子树内部的逆序对与是否交换 ...

随机推荐

  1. 启动Windows PowerShell ISE

    Windows Server 2008 R2 环境下,启动PoserShell ISE方法: 方法1:在cmd.exe控制台或运行框中,输入 powershell_ise.exe 执行即可. 方法2: ...

  2. mysql解压缩方式安装和彻底删除

    一.安装mysql (1)将下载下来的mysql压缩文件解压缩到需要安装mysql的目录中 (2)打开解压后的文件夹,复制default.ini文件并重命名为my.ini,此文件的相关配置为: (3) ...

  3. Spring-----注解开发和Spring测试单元

    一.注解开发 导入jar包;spring-aop-xxx.jar 导入约束:(在官方文档xsd-configuration.html可找) <beans xmlns="http://w ...

  4. Android IJKPlayer缓冲区设置以及播放一段时间出错解决方案

    IJKPlayer拖动播放进度会导致重新请求数据,未使用已经缓冲好的数据,所以应该尽量控制缓冲区大小,减少不必要的数据损失. mMediaPlayer.setOption(IjkMediaPlayer ...

  5. nginx访问php程序相关配置

    server { listen *:80; charset utf-8; server_name roujiaxiaomowang.wanghaokun.com mowang.crucco.com; ...

  6. springMVC返回Base64位编码图片验证码

    import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;impor ...

  7. Swift Intermediate Language (SIL)

    Swift Intermediate Language (SIL) https://github.com/apple/swift/blob/master/docs/SIL.rst#witness-me ...

  8. CREATE CONSTRAINT TRIGGER - 定义一个新的约束触发器

    SYNOPSIS CREATE CONSTRAINT TRIGGER name AFTER events ON tablename constraint attributes FOR EACH ROW ...

  9. RNN,LSTM,GRU基本原理的个人理解

    记录一下对RNN,LSTM,GRU基本原理(正向过程以及简单的反向过程)的个人理解 RNN Recurrent Neural Networks,循环神经网络 (注意区别于recursive neura ...

  10. 服务器端编程心得(二)—— Reactor模式

    最近一直在看游双的<高性能linux服务器编程>一书,下载链接: http://download.csdn.net/detail/analogous_love/9673008 书上是这么介 ...