树(3.16

一道树状数组,一道图论,一道树链剖分

seqmod:如何将边权有序求和

先了解一下暴力30

模拟一下可以知道怎么处理

处理边权:将边权赋给它连接的两点(u,v)中的v

求和:(求lca,从链的两边往上跳,跳到lca)

有序:往上跳的时候,右子树(下几层)下面的点值最大,正序推

左子树(下几层)点值最小,逆序推

再了解一下大佬教的正解

大致思想:其实处理的很像是快读,ret=ret*10+p

但是很明显的是你一个个往上跳绝对绝对会超时,这时候我们就想到了倍增-->一次跳2的几次幂,那么这时候乘的肯定就不是2的0次方了而是2的i-1次方

我们考虑从下往上合并时的通解,(从上往下就同理,很好想了),跳一步合并的是a*10+b(下面的链是a,上面的是b)详见p201算法竞赛,那么跳2的i-1,通解就是a*10^2^(i-1)+b

rotinv : 树状数组求逆序对

去推如何从上一个状态到下一个状态(因为不可能每一个序列求一次逆序对),去找递推式

求逆序对:归并排序(O(N+M)logM)还是很大的

rise:惊不惊喜

它其实是道图论题

首先肯定考虑相邻的,前面的大后面一定看不到,那么就把其建一条边,用dfs

猜你喜欢

转载自www.cnblogs.com/lkx422/p/10542710.html