hdu5111 树链剖分,主席树
hdu5111 链接 hdu hdu挂了,我也不知道这份代码对不对,反正过了对拍了 思路 先考虑序列上如何解决。 1 3 2 5 4 1 2 4 5 3 这个序列变成 1 2 3 4 5 1 3 5 5 2 是对答案没有影响的(显然)。 然后查询操作 \(l,r,L,R\) 就是, 一段连续的区间 \([L,R]\) 内包含几个值在 \([l,r]\) 的数字个数. 主席树就可以做了。 \(query(rt[L-1],rt[R],[l,r]的和)\) 可以用树链剖分把树上问题转化成链上。 左边一棵树树链剖分,每一条链子都是一段连续的。 右边一棵树根据父子关系建立主席树。 然后向上跳统计贡献。 错误 一遍过样例,然而清空死了。 而且这错误找了之后我也不感觉他错。 对,我感觉是c++的错。 代码 #include <iostream> #include <map> #include <cstring> #include <algorithm> #define ls(x) (t[x].ls) #define rs(x) (t[x].rs) using namespace std; const int _=1e5+7; int read() { int x=0,f=1;char s=getchar(); for(;s>'9'||s<'0';s=getchar()) if(s=='-') f