【BZOJ4012】开店(主席树)】的更多相关文章

Description 风见幽香有一个好朋友叫八云紫,她们经常一起看星星看月亮从诗词歌赋谈到 人生哲学.最近她们灵机一动,打算在幻想乡开一家小店来做生意赚点钱.这样的 想法当然非常好啦,但是她们也发现她们面临着一个问题,那就是店开在哪里,面 向什么样的人群.很神奇的是,幻想乡的地图是一个树形结构,幻想乡一共有 n 个地方,编号为 1 到 n,被 n-1 条带权的边连接起来.每个地方都住着一个妖怪, 其中第 i 个地方的妖怪年龄是 x_i.妖怪都是些比较喜欢安静的家伙,所以它们并 不希望和很多妖怪…
[BZOJ4012]开店(主席树) 题面 Description 风见幽香有一个好朋友叫八云紫,她们经常一起看星星看月亮从诗词歌赋谈到 人生哲学.最近她们灵机一动,打算在幻想乡开一家小店来做生意赚点钱.这样的 想法当然非常好啦,但是她们也发现她们面临着一个问题,那就是店开在哪里,面 向什么样的人群.很神奇的是,幻想乡的地图是一个树形结构,幻想乡一共有 n 个地方,编号为 1 到 n,被 n-1 条带权的边连接起来.每个地方都住着一个妖怪, 其中第 i 个地方的妖怪年龄是 x_i.妖怪都是些比较喜…
考虑这样一个问题:一棵树初始全是白点,有两种操作:把一个点染黑:询问某点到所有黑点的距离之和. 注意到树上两点x和y的距离为depth[x]+depth[y]-depth[lca(x,y)]*2.要求出上面的东西,depth[x]+depth[y]可以很简单的算出来,关键在于depth[lca(x,y)].这一部分实质上是x到根的路径和y到根的路径重合的部分.那么我们可以树剖,在修改的时候,把该点到根的路径全部+1(其实是1单位,具体到每个点是其到父亲的那条边的长度),查询时查这个点到根的权值和…
[HNOI2015]开店 LG传送门 蒟蒻表示不会动态淀粉质. 先把点按年龄排序, 设\(dis[i]\)表示\(i\)到根的距离. 把我们要算的东西稍微变下形:\(ans\) \[ = \sum \limits _{i = l} ^r (dis[i] + dis[u] - 2 * dis[lca(i, u)]\] \[ = \sum \limits _{i = l} ^r dis[i] + (r - l + 1) * dis[u] - 2 * \sum \limits _{i = l} ^r…
听说正解点分树?我不会就对了 此题是 \([LNOI2014]LCA\) 强化版,也是差分一下,转化为区间加区间和 不过权值有大小要求,那么我们按照权值排序,依次加入主席树,询问的时候 \(lower\_bound\) 一下找到区间 \([l,r]\) 在主席树上实现区间加,肯定要标记永久化.每次最多修改 \(2\lfloor \log^n\rfloor\) 个区间,所以一次最多会开出 \(4\lfloor \log^n\rfloor-1\) 个结点,空间复杂度理论上是 \(O(4n\log^2…
讲得好啊 主席树区间修改了,每一次遇到整区间就打永久化标记(不下传,访问的时候沿路径上的标记算答案)然后returnreturnreturn,那么每修改一次只会访问到lognlognlogn个节点,再加上每个点要在树链上修改lognlognlogn次,所以空间复杂度O(nlog2n)O(nlog^2n)O(nlog2n),实测开O(n∗50)O(n*50)O(n∗50)能过- 各个sum都要开longlong啊,毁一生 CODE #include <cmath> #include <cs…
正解:主席树/动态点分治 解题报告: 传送门! $umm$淀粉质的话要是动态的我还不会$QAQ$,,,所以先写下主席树的题解昂$QwQ$ 题目大意是说,给定一棵树,树上每个点都有个值,然后有若干个询问,每次询问给定三个值,$(u,l,r)$,表示求值大小在$[l,r]$范围内的所有点到$u$点的距离之和是多少 考虑如果没有这个$[l,r]$的限制,就只是说,有若干个询问,每次给定一个$u$,问树上所有点到$u$的距离,怎么搞$QwQ$? 考虑固定一个点为根节点$rt$,预处理一个各个节点到根节点…
BZOJ 4012 [HNOI2015]开店 的弱化版,离线了,而且没有边权(长度). 两种做法 1 树剖+离线+线段树 这道题求的是一个点zzz与[l,r][l,r][l,r]内所有点的lcalcalca的深度之和.可以发现,dep[lca(u,v)]dep[lca(u,v)]dep[lca(u,v)]就等于从uuu到根与从vvv到根的路径的交集路径的长度.那么只要把[l,r][l,r][l,r]所有点到根的路径标记了,然后用zzz点往根跑统计答案就行了.这样的话差分一下,离线就可以处理了.…
题目大意: 给定一个n个数的序列和m个询问(n,m<=100000)和k,每个询问包含k+2个数字:l,r,b[1],b[2]...b[k],要求输出b[1]~b[k]在[l,r]中是否出现. 思路:把所有连续的k个数字hash一下,然后扔进主席树,询问时在主席树中查询就可以了. 注意(坑)点:1.hash值要用unsigned long long存 2.如果直接求l+r>>1会爆,所以要改成(l>>1)+(r>>1)+(l&r&1) 3.Yes和…
树状数组套主席树模板题... 题目大意: 给定一个含有n个数的序列a[1],a[2],a[3]--a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[i+2]--a[j]中第k小的数是多少(1≤k≤j-i+1),并且,你可以改变一些a[i]的值,改变后,程序还能针对改变后的a继续回答上面的问题.你需要编一个这样的程序,从输入文件中读入序列a,然后读入一系列的指令,包括询问指令和修改指令.对于每一个询问指令,你必须输出正确的回答. 第一行有两个正整数n(1≤n≤1…