0%

P3834 【模板】可持久化线段树 2

思路讲解

主要参考这段代码

https://github.com/algorithmzuo/algorithm-journey/blob/main/src/class157/Code02_PointPersistent2.java

参考题解

【算法讲解157【挺难】可持久化线段树和标记永久化】 【精准空降到 45:11】 https://www.bilibili.com/video/BV1bSc6eREi4/?share_source=copy_web&vd_source=6ca0bc05e7d6f39b07c1afd464edae37&t=2711

AC代码

https://www.luogu.com.cn/record/218615977

心路历程(WA,TLE,MLE……)

https://www.luogu.com.cn/record/218612872

这个 k-lsum 要小心,记得要加,因为往r走相当于抛掉了一些东西

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// u v 为node,l,r为区间,k为区间第k小
int query(int u,int v,int l,int r,int k){
if(l==r){
return l;
}
// 我们这样就知道了
int lsum=sum[ls[v]]-sum[ls[u]];
int mid=l+r>>1;
if(lsum>=k){
return query(ls[u],ls[v],l,mid,k);
}else{ // 这个 k-lsum 要小心,记得要加,因为往r走相当于抛掉了一些东西
return query(rs[u],rs[v],mid+1,r,k-lsum);
}
}