随笔分类 -  树状数组

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