随笔分类 - 0x16树状数组
摘要:题目链接 #题目大意 给你一棵以1为根的树,询问树上两点之间的路径点权在[a,b]之间的点权和。 #(假的)解题思路1 树剖+主席树 看到题目就想到树剖+主席树,树剖之后按照dfs序建主席树,主席树用来维护权值信息,树剖用来查询链上的权值和(常数爆炸,卡时间过的)。 const int maxn =
阅读全文
摘要:题目链接 #题目大意 模拟一下multiset,一共有两个操作: 1.插入一个数 2.删除第k小的数 #解题思路 用权值树状数组来维护,主要是新学了树状数组倍增的方法,可以比二分少一个log来查找第k小的数,maxn不一定得是2的幂,但得保证一定能枚举到范围内的所有数,即枚举的最大的2的幂的2倍要比
阅读全文
摘要:题目链接 #题目大意 询问区间[l,r]中满足相邻两个树大小不超过k的数对。 #解题思路 如果一个一个加入数字的话,设当前数字为i,那么对答案的贡献就是之前的数字之中[ai−k,ai+k]范围内的数字的数量,可以用莫队来维护l,r,然后每次的修改和查询操作用树状数组来操作。 #代码 cons
阅读全文
摘要:题目链接 #题目大意 略 #解题思路 如果一个子段合法,那么必然左边的值作为最小值的区域和右边的值作为最大值的区域都能包含彼此,所以用单调栈求出右边的值作为最大值能到达左边的下标的最小值li,以及左边的值作为最小值能够到达右边的下标的最大值ri,然后将前者排序,按从左到右的顺序遍历每个数
阅读全文
摘要:题目链接 #题目大意 给n个数,你要把这n个数排列成前k个不降序,后n-k个不升序,只能交换相邻的两个数,问最小的交换次数。 #解题思路 对于每个数,他只有两个选择,要么排在左面,要么排在右面,所以开两个树状数组,计算这个数排到左面和排到右面需要的最小交换次数,然后取最小值就行了。 #代码 cons
阅读全文