题目描述:

bzoj3545luogu

bzoj3551

题解:

重构树+线段树合并。

可以算是板子了吧。

代码(非强制在线):

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = ;
const int M = *N;
template<typename T>
inline void read(T&x)
{
T f = ,c = ;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){c=c*+ch-'';ch=getchar();}
x = f*c;
}
int n,m,q,to[N],h[N];
struct Pair
{
int x,y;
}p[N];
bool cmp(Pair a,Pair b){return a.x<b.x;}
struct Edge
{
int x,y,w;
void rd(){read(x),read(y),read(w);}
}d[M];
bool emp(Edge a,Edge b){return a.w<b.w;}
int ff[N<<],fa[N<<][],wg[N<<],ch[N<<][];
int findff(int u){return u==ff[u]?u:ff[u]=findff(ff[u]);}
void kru()
{
wg[] = 0x3f3f3f3f;
for(int i=;i<=(n<<);i++)ff[i] = i;
int tot = n,sum = ;
for(int i=;i<=m&&sum<n-;i++)
{
int x = findff(d[i].x),y = findff(d[i].y);
if(x!=y)
{
ff[x]=ff[y]=fa[x][]=fa[y][]=++tot;
wg[tot]=d[i].w;
sum++;
ch[tot][]=x,ch[tot][]=y;
}
}
}
void init()
{
for(int k=;(<<k)<=(n<<);k++)
for(int i=;i<(n<<);i++)
fa[i][k]=fa[fa[i][k-]][k-];
}
int rt[N<<];
struct segtree
{
int siz[*N],ls[*N],rs[*N],tot;
void insert(int l,int r,int&u,int qx)
{
if(!u)u=++tot;siz[u]++;
if(l==r)return ;
int mid = (l+r)>>;
if(qx<=mid)insert(l,mid,ls[u],qx);
else insert(mid+,r,rs[u],qx);
}
int merge(int x,int y)
{
if(!(x*y))return x+y;
int z = ++tot;
siz[z] = siz[x]+siz[y];
ls[z] = merge(ls[x],ls[y]);
rs[z] = merge(rs[x],rs[y]);
return z;
}
int query(int l,int r,int u,int qk)
{
if(l==r)return l;
int tmp = siz[rs[u]],mid = (l+r)>>;
if(qk<=tmp)return query(mid+,r,rs[u],qk);
else return query(l,mid,ls[u],qk-tmp);
}
}tr;
int main()
{
// freopen("tt.in","r",stdin);
read(n),read(m),read(q);
for(int i=;i<=n;i++)read(p[i].x),p[i].y=i;
sort(p+,p++n,cmp);
for(int las=0x3f3f3f3f,k=,i=;i<=n;i++)
{
if(las!=p[i].x)
{
las = p[i].x;
to[++k] = las;
}
h[p[i].y] = k;
}
for(int i=;i<=m;i++)d[i].rd();
sort(d+,d++m,emp);
kru();init();
for(int i=;i<=n;i++)tr.insert(,n,rt[i],h[i]);
for(int i=n+;i<(n<<);i++)rt[i]=tr.merge(rt[ch[i][]],rt[ch[i][]]);
for(int u,w,k,i=;i<=q;i++)
{
read(u),read(w),read(k);
for(int j=;j>=;j--)if(wg[fa[u][j]]<=w)u=fa[u][j];
if(tr.siz[rt[u]]<k)puts("-1");
else printf("%d\n",to[tr.query(,n,rt[u],k)]);
}
return ;
}

bzoj3545 [ONTAK2010]Peaks、bzoj3551 [ONTAK2010]Peaks加强版的更多相关文章

  1. bzoj3545/bzoj3551 [ONTAK2010]Peaks/Peaks加强版

    bzoj3545/bzoj3551 [ONTAK2010]Peaks/Peaks加强版 传送门:bzoj  bzoj wdnmd为什么加强版不是权限题原题却是啊 3545: [ONTAK2010]Pe ...

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

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

  3. [BZOJ3551][ONTAK2010]Peaks(加强版)(Kruskal重构树,主席树)

    3551: [ONTAK2010]Peaks加强版 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 2438  Solved: 763[Submit][ ...

  4. BZOJ3551 [ONTAK2010]Peaks加强版 kruskal 并查集 主席树 dfs序

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3551 题意概括 Description 在Bytemountains有N座山峰,每座山峰有他的高度 ...

  5. BZOJ3551: [ONTAK2010]Peaks加强版【Kruskal重构树】【主席树】

    重要的事情说三遍 不保证图联通 不保证图联通 不保证图联通 那些和我一样认为重构树是点数的童鞋是要GG Description [题目描述]同3545 Input 第一行三个数N,M,Q. 第二行N个 ...

  6. BZOJ3551 : [ONTAK2010]Peaks加强版

    首先强制在线的话,肯定是不能再离线排序+平衡树启发式合并了. 这回要用的是线段树合并,每次把两棵线段树合并,总复杂度为$O(n\log n)$ 预处理: 把边按权值从小到大排序,依次加边, 对于边(x ...

  7. 【BZOJ3545&BZOJ3551】Peaks(kruskal重构树,主席树,dfs序)

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

  8. Peaks BZOJ 3545 / Peaks加强版 BZOJ 3551

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

  9. 【BZOJ3551】 [ONTAK2010]Peaks加强版

    BZOJ3551 [ONTAK2010]Peaks加强版 Solution Kruscal重构树后发现可以对于小于的离散化然后倍增+主席树找到上一个的可行解. 然后就可以了. 如果数组开的不好,容易在 ...

随机推荐

  1. IT兄弟连 JavaWeb教程 JSP定义

    JSP页面是指扩展名为.jsp的文件,在一个JSP页面中,可以包括指令标识.HTML代码.JavaScript代码.嵌入的Java代码.注释和JSP动作标识等内容.但这些内容并不是一个JSP页面所必须 ...

  2. web框架原理,http 协议

    目录 web框架原理 web框架是什么东西 执行代码用浏览器访问一下 输出结果 http 协议 http 协议简介 http 协议概述 http 工作原理 http请求方法 http 状态码 url介 ...

  3. maven - settings.xml文件详解

    Settings.xml配置文件详解 maven默认的settings.xml是一个包含注释和例子的模板,可以快速的修改settings.xml文件 maven安装后不会在用户目录下自动生成setti ...

  4. 存储-InfluxDB

    1 TSDB influxDB是一个time series时间序列数据库. 在监控系统的开发中,大体分为采集-存储-可视化三个大类.监控指标有很显著的时间特征数据,一般采用TSDB存储. 在TSDB中 ...

  5. Dwarves, Hats and Extrasensory Abilities Codeforces - 1063C

    https://codeforces.com/contest/1063/problem/C 首先可以想到一个简单做法:先钦定这个直线的斜率k=-1,然后设直线y=-x+b 设黑点放直线上方:如果已知( ...

  6. Oracle / PLSQL写语句 常用的几个函数

    下面开始记录一下,自己在Oracle或者PLSQL常用的几个函数, 1add_months 增加或减去月份2. last_day(sysdate) 返回日期的最后一天3. months_between ...

  7. “chm 已取消到该网页的导航”解决方案

    1. 右键单击该 CHM 文件,然后单击“属性”. 2. 单击“取消阻止”或者“解除锁定”. 3. 双击此 .chm 文件以打开此文件.

  8. Eclipse下对MAVEN进行junit软件测试

    一.Maven project management and build automation tool, more and more developers use it to manage the ...

  9. Linux远程连接及常用指令

    一.远程连接 一般,服务器都是特别庞大的,会把它们用一个独立的小屋进行存放,如果有时候需要对服务器进行一些操作,离得近还好,离的远就会破费一些周折了,所以,这个时候我们就需要用到远程连接软件了.推荐使 ...

  10. Servlet和JSP之JSTL学习

    JSTL JSTL就是JSP标准标签库(JavaServer Pages Standard Tag Library, JSTL)是一个定制标签库的集合,用来解决像遍历Map或集合.条件测试.XML处理 ...