高中3523. 【NOIP2013模拟11.7A组】JIH的玩偶
来源:互联网 发布:linux ntp 开机启动 编辑:程序博客网 时间:2024/05/14 18:29
很久没写题解了。
Description
JIH的玩具厂设立以来,发展了一张销售关系网。这张网以玩具厂为总代理(根),构成一颗树。每个节点都代表一个客户,且每个节点都有重要度ai。JIH想将这些客户划成若干类别,当然同一类的客户重要度相差太大总是不妥。所以JIH决定先进行市场调研。JIH会选择两个客户X,从X向根走一共k个节点进行调查。调查的结果是这条路径上重要程度相差最大的两个客户的差值是多少。因为特殊需要,要求重要度大的客户必须在重要度小的客户后面(顺序为X到根,若序列为递减,则输出0,详情见样例)。
Input
第一行一个整数N 表示N个客户
第二行N个整数Ai 表示N个客户的重要程度(工厂是1)
第三行开始 共N-1行 每行2个整数 x,y 表示x的父亲是y
接着一行一个正整数Q,表示Q次调研
接着Q行,每行两个整数X,K。含义见题目表述。
Output
Q行,每行一个正整数,含义见题目描述。
Sample Input
6
5 6 1 7 5 2
2 1
3 1
4 2
5 2
6 3
3
4 3
6 2
6 3
Sample Output
0
0
4
Data Constraint
30% 的数据中N,Q<=10000
100%的数据中N,Q<=200000 Ai<=1000000
30%
暴力,根据每个询问来计算答案(当然我只有10分233)
100%
考虑用倍增的思想。
(什么是倍增?自己百度)
设fa[x,j]表从节点x开始,向根移动2^j后的位置。
fmax[x,j]表从节点x开始向上2^j个节点间的最大值(包括第x个)
fmin[x,j]同上,不过是最小值
fans[x,j]表从节点x开始向上2^个节点间的答案(最大-最小,最大在最小前)
可以根据二分的思想来计算上面四个数组。
Fa数组
每一个节点的fa[x,0]都是它的父节点(0次祖先)
然后按照搜索的顺序,在一个节点之前的节点的fa都被算出来了。
那么节点x的fa[x,j]=fa[fa[x,j-1],j-1]。
就是它j-1级祖先的j-1级祖先,既是它的j级祖先。
如图,比如说我要求f[x,2] (f[x,0~1]为已知)
那么x的2^1次祖先是y,那y的2^1次祖先就是x的2^2次祖先。
Fmax/Fmin数组
比如说,一个节点已知fmax[x,0~1],求fmax[x,2]
我们可以利用求出的fa数组,把x向上分成(2^1)*2段,两段的最大/小值就是连起来一大段的答案。
Fans数组
同样分成两段来计算。
两种可能:
①最大和最小在同一段。
②最大和最小不在同一段。
①
像上面一样,分成两段求最大值。
②
用上面一段的最大值减下面一段的最小值。
关于计算答案
把它按照二进制分成若干段,有两种可能。
①总最大最小在同一段。
②不在同一段。
①
一边向上跳,一边统计fans数组。
②
类似上面,从下往上找时维护最小值,用当前这一段的最大值去减去之前的最小值。
- 高中3523. 【NOIP2013模拟11.7A组】JIH的玩偶
- 3523. 【NOIP2013模拟11.7A组】JIH的玩偶(tree)
- 3523. 【NOIP2013模拟11.7A组】JIH的玩偶(tree)
- jzoj. 3523. 【NOIP2013模拟11.7A组】JIH的玩偶(tree)
- JIH的玩偶
- Jzoj3523 JIH的玩偶
- JIH的玩偶 8.2 T3
- 高中OJ3516. 【NOIP2013模拟11.6A组】摧毁巴士站
- 高中OJ3505. 【NOIP2013模拟11.4A组】积木(brick)
- 高中OJ3511. 【NOIP2013模拟11.5A组】cza的蛋糕(cake)
- JZOJ3457. 【NOIP2013模拟联考3】沙耶的玩偶(doll) (2017.8B组)
- 【NOIP2013模拟11.7A组】不等式(solve)
- 高中OJ3502. 【NOIP2013模拟11.4B组】方格游戏(game)
- 高中OJ3503. 【NOIP2013模拟11.4B组】粉刷(paint)
- 高中OJ3504. 【NOIP2013模拟11.4B组】运算符(calc)
- 高中OJ3514. 【NOIP2013模拟11.6B组】最小比例
- 高中OJ3515. 【NOIP2013模拟11.6B组】软件公司
- 高中OJ3517. 【NOIP2013模拟11.6B组】空间航行
- 2017.7.12开始写博客
- 不重复随机数列的生成算法
- bzoj1119 [POI2009]SLO 置换
- jzoj1279 解题 (dp)
- 每日英语阅读(八)
- 高中3523. 【NOIP2013模拟11.7A组】JIH的玩偶
- 微信小程序-获得微信用户识别码(OPENID) C#
- jzoj3518【NOIP2013模拟11.6A组】进化序列
- python3 requests库实现多图片爬取
- 【正一专栏】评《我的前半生》——我们需要怎样的价值观
- 3927. 【NOIP2014模拟11.6】可见点数 (Standard IO)
- JavaScript跨域总结与解决办法
- Android基础篇——聊聊Android系统
- Golang教程:(十四)字符串