随笔分类 - 树状数组
摘要:链接 数据范围不大,考虑开100个二维树状数组进行维护 #include <iostream> using namespace std; #define MAXN 305 int col[MAXN][MAXN]; int N,M; struct Binary { #define lowbit(x)
阅读全文
摘要:题目链接 想到了用dfs去递归子树 然后歪了 想用dfs序和size去压到一维数组,然后查询区间排名,这里用分块可以过 但是想试一下树状数组 主要问题是在如何消除子树间统计答案的影响 借鉴了题解 只要先减掉之前的答案,维护后再加上,就可以抵消掉子树影响 #include <iostream> #in
阅读全文
摘要:题目链接 可以证明a中第k大应该对于b中第k大 满足此条件的两个数列,完成一次交换,有可能使得答案变劣 只对一个数列进行操作和对两个数列进行操作是等价的 数据很大,需要离散化 假设确定a数组,只移动b,你会发现很困难 这里不妨使得a数组的第一项为第一,第二项为第二…… 对应的b数组中的数也进行替换
阅读全文
摘要:Description 有若干个音符,出现的时间为$i$,若选择这个音符,则$(i t_I,i+t_i)$这部分的音符都不能选。每个音符都有权值,求可以得到的最大权值。数据范围$N \leq 1000000$。 Solution 上机的时候没有做出来。只写了一个$O(N^2)$的解。 一开始我想把这
阅读全文
摘要:"传送门" 开始用莫队水了90分。 想了很久还是没想出来,于是看了一眼题解。妙!实在妙! 考虑一个数字只被算一次?那么其他的数应该被删掉。 对于一个固定的右区间端点,显然删的数越往后越好。 于是考虑把所有询问的区间按右端点排序,然后开始扫一遍。用树状数组维护前缀和。 cpp include incl
阅读全文
摘要:"传送门" 您需要一种数据结构: 插入一个数$x$ 删除一个数$x$ 查询$x$这个数在所有数中的排名 查询排名为$x$的数 求$x$这个数的前驱(前驱定义为小于$x$的最大数)‘ 求$x$这个数的后继(后继定义为大于$x$的最小数) 平衡树 Splay cpp include include in
阅读全文
摘要:一道万能题~~ "题目 洛谷 链接" Solution 1 因为数据是静态的,可以使用st表进行离线预处理,然后循环一遍,输出每个区间的答案。 Solution 3 毕竟是有区间查询的,所以可以使用线段树和树状数组。但是在这里并不是最优解。
阅读全文
摘要:#include <iostream> #define MAXN 500005 #define lowbit(x) (x&(-x)) using namespace std; int pre[MAXN]; int N,M; inline int get_sum(int x) { int ans =
阅读全文

浙公网安备 33010602011771号