刷题题单
文章平均质量分 63
记录一些刷过的好题
Auroraaaaaaaaaaaaa
我给世界唱歌
展开
-
线段树合并例题
将树看成有根树,取1作为根,每次发放粮食的操作 利用树上差分转化为4次单点发放粮食,直接修改即可,查询数量最多的粮食种类,我们采用 权值线段树 维护每种粮食的数量,建n棵线段树,最后通过 线段树合并+dfs 求出线段树的树上前缀和。求标号第k小的岛,我们考虑使用权值线段树,通过线段树上二分查找第k小,对于多个岛屿,我们考虑动态开点建 n 棵线段树,对于岛屿修路的操作 使用并查集维护连通块,并利用线段树合并实现岛屿合并。原创 2023-08-02 22:47:54 · 372 阅读 · 0 评论 -
P4053 建筑抢修(优先队列维护反悔贪心)
如果修不了的话,判断 修这个建筑的时间 和 堆顶元素(之前修建筑的最大时间),如果比之前时间小的话,进行反悔操作,即不修之前的那个建筑,改修现在的建筑,由于按照报废时间排序,当前建筑一定不会报废,实现反悔贪心。给 n 个建筑,每个建筑有一个维修时间 T1,如果在 T2 时间内还没维修完,就报废了,只能一个一个维护建筑,问最多为维修几个建筑。将所有建筑按照报废时间排序,然后一次遍历,如果可以修的话一定要修,并把修这个建筑需要的时间 T1 放进优先队列维护。原创 2023-07-26 19:28:55 · 174 阅读 · 0 评论 -
bitset优化例题
用一个 bitset dp 维护 当前的数 可以组成哪几个 x ,用 bitset tmp 维护 当前的状态 可以转移到哪几个状态,滚动优化空间,复杂度为O(n^5 / 64)原创 2023-07-30 16:11:04 · 335 阅读 · 0 评论 -
线段树题单
然后离线下来每次询问,把所有询问按左端点排序,然后再遍历询问,保证了每次查询的左端点递增,这样 小于 当前询问 l 的数值一定不会在后面的区间里出现,用一个 l 指针维护再也不会查询到的点,每次将 经过的 l 的下一个相同数字处 ans [ nxt [ i ] ] 赋值 INF,表示上一个相同的点不会访问到,这样便可转换为单纯的区间查询,复杂度为(n+q)log(n)给一个 n 个元素的数组 a ,m 次询问,每次询问区间 [ l , r ] 内 数值相等的两个数的最近距离,不存在则输出 -1。原创 2023-07-25 20:55:34 · 180 阅读 · 0 评论