随笔分类 - 线段树
1
摘要:传送门 听说正常写法是差分约束? 我怎么看都是贪心啊,所以就用贪心写了(其实是我忘记差分约束怎么写了) 考虑把区间按右端点排序,那么对于每个区间,我们考虑选择的数尽量贴着区间右边,因为这样还可以尽量满足之后区间的要求 (显然填在左边对后面没有任何好处,填右边一定比填左边好) 然后这样搞如果直接暴力复
阅读全文
摘要:传送门 显然答案等于初始时的答案减去最多可以减少的代价 考虑在某个路段 $[l,l+1]$ 用一次加速的影响,设 $r$ 为 $l$ 往右(不包括 $l$)第一个车要等人的站,那么所有下车的站在 $[l+1,r]$ 之间的人都可以少一秒 设第 $i$ 个站下车 $leav[i]$ 人,那么贡献即为
阅读全文
摘要:传送门 这一题基础是二分图匹配,并且要知道一个 $Hall$ 定理:对于二分图能完全匹配的充要条件是,设点数少的那边为左边,点数为 $n$,对于 $k \in [1,n]$ ,左边任意 $k$ 个点,右边都要有至少有 $k$ 的点与左边这些点相连 证明好像也不难,首先必要性是显然的 然后考虑对于左边
阅读全文
摘要:传送门 这个题一眼 $dp$ 就是设 $f[i][0/1]$ 表示我们只考虑前 $i$ 个位置,并且保证覆盖了前 $i$ 个位置,当前位置 选/不选 的最小代价 考虑转移,设题目给出的字符串为 $s$ 首先 $f[i][0]$ 必须从 $f[j][1]$ 转移过来,其中 $ j+k>=i \text
阅读全文
摘要:传送门 对于询问,首先如果正数数量不到 $c$ 个显然无解 然后如果大于等于 $s$ 的数大于等于 $c$ 个,那么显然有解 否则,考虑贪心地取数,首先初始大于等于 $s$ 的哪些数我们每次取都可以取到,所以直接把 $c-cnt$ ,其中 $cnt$ 是初始大于等于 $s$ 的数的个数 然后考虑剩下
阅读全文
摘要:传送门 对于某个点 $(x,y)$ ,不妨设 $x<y$ 因为如果 $x>y$ 直接按 $y=x$ 对称一下即可 当且仅当正方形左下角 $(a,a)$ 满足 $a<=x$,右上角 $(b,b)$ 满足 $b>=y$ ,才能得到这个点的价值 所以发现其实是个二维偏序的问题,直接把 $(a,b)$ 看成
阅读全文
摘要:传送门 就是个最短路....数据过于垃圾,随机边不用连都可以 $Ac$ 这里用的是线段树优化 $Dijkstra$ ,这样就不会一个节点反复进入堆里占空间了,速度显然更快
阅读全文
摘要:传送门 A. Creating a Character 设读入的数据分别为 $a,b,c$ 对于一种合法的分配,设分了 $x$ 给 $a$ 那么有 $a+x>b+(c-x)$,整理得到 $x>(b+c-a)/2$ 因为 $x \in [0,c]$ ,所以求一下区间交的大小即可,注意 (b+c-a)
阅读全文
摘要:传送门 怎么主要写的都是平衡树,这种查询排名,查询第 $K$ 大的操作直接权值线段树就行了 把读入的数据离散化一波,然后开个 $map$ 维护每个人最后一次插入时在线段树上的位置,直接线段树维护就完事了 查询排名就询问大于它的节点数量,查询第 $K$ 大直接线段树上二分 就是数据格式比较恶心,细节有
阅读全文
摘要:传送门 显然可以考虑 $dp$ 设 $f[i]$ 表示当前到了时间 $i$,从初始到 $i$ 的时间都安排好打扫了 把所有牛按照区间 $l,r$ 双关键字排序 这样枚举到一头牛 $x$ 时,在 $x.l$ 之前的牛都考虑完了($x.l$ 是牛 $x$ 的左区间) 然后枚举 $[x.l-1,x.r]$
阅读全文
摘要:传送门 考虑一个玩家的路径 $(x,y)$ 对路径上的一个节点 $u$ 的贡献 设 $lca=LCA(x,y)$ ,当 $u$ 在链 $x,lca$ 上时,路径会产生 $1$ 的贡献当且仅当 $dep[x]-dep[u]=w[u]$ 其中 $dep[i]$ 表示节点 $i$ 的深度,$w[i]$ 就
阅读全文
摘要:传送门 区间第 $K$ 小,直接树套树 外层树状数组维护区间,内层权值线段树维护排名 和正常的权值线段树类似,查询第 $K$ 小时也是在线段树上二分,但是此时不是两颗线段树作差,而是树状数组上的 $2log_n$ 个线段树作差 跳的话就 $2log_n$ 个节点一起跳就好了 要记得离散化
阅读全文
摘要:传送门 注意操作 $1$ 是在区间的每个位置加入一个数,不是加上一个值 相当于每个位置维护的是一个集合 显然树套树 一开始想的是区间线段树套权值线段树 发现这样询问区间第 $K$ 大时就要先二分答案再用 $O(log^2_n)$ 时间查询 那么单次询问的复杂度就有 $O(log^3_n)$ ,显然不
阅读全文
摘要:传送门 区间修改区间询问,考虑线段树维护 对于一个询问 $l,r$ ,如果我们能求出总每种情况的总花费,那么最终答案就是总花费除 $C^2_{r-l+1}$ 为了方便维护把每条边看成点,那么线段树有 $n-1$ 个叶子节点 考虑线段树两个相邻区间 $lc,rc$ 合并成区间 $O$ 显然先设 $su
阅读全文
摘要:传送门 直接大力线段树套平衡树 线段树维护区间,平衡树维护权值 对于询问区间内排名为 $K$ 的值,二分答案然后判断 其余操作都很好搞了 复杂度 $O(nlog^3_n)$ ,然后就是丧心病狂的代码和卡常时间了QAQ 我这个傻逼的代码要开 $O2$ 才过得去QAQ 如果一开始建树时不要一个个插入而是
阅读全文
摘要:传送门 设 $val[i]$ 为位置 $i$ 的值 维护 $ansL[i]$ 表示位置 $i$ 的数左边所有大于 $val[i]$ 的数的数量 维护 $ansR[i]$ 表示位置 $i$ 的数右边所有小于 $val[i]$ 的数的数量 考虑先求出一开始总的逆序对数 $ans$ 每次删除一个数 (位置
阅读全文
摘要:传送门 骚题一道,给每个"数"一个实数值 A 来表示它们的相对大小关系 $A\in (0,1)$ 考虑如何维护它们之间的相对大小关系 有插入操作 考虑一颗二叉查找树,每个节点维护它子树的最小值$A_{min}$,最大值$A_{max}$,它本身的实数$\frac{A_{min}+A_{max}}{2
阅读全文
摘要:传送门 题目貌似有锅.. 它说输出最少旋转次数,然而应该是最少逆序对数... 考虑一个把子树合并的过程,在子树合并时计算左右子树产生的逆序对数 这样一直合并最后就是答案 所以可以对每个子树建一个权值线段树 然后把权值线段树合并 合并时计算逆序对只要计算跨 mid 的逆序对 如果翻转也只要计算跨 mi
阅读全文
摘要:传送门 树剖+动态开点线段树 对每种宗教开一个线段树,用来维护区间和,区间最大值 普通的线段树空间不够,所以要动态开点 因为宗教会改变,所以要有删除操作和插入操作 比如城市1从信仰a变成信仰b,那就把a的线段树上城市1删掉,在b线段树上插入城市1 询问就只要询问与旅行者同宗教的值就好了 怎么实现也不
阅读全文
摘要:传送门 线段树 开根号好像没办法搞延迟标记 但是可以发现 10^12 只要开 6 次根号向下取整就等于 1 1再怎么开也是1 所以一个数最多只要开6次根号就不用再搞了 我们可以维护一个最大值 如果整个区间的最大值<=1 那么整个区间都不需要修改,直接跳过就好了 不然的话就暴力开根 修改复杂度 O(6
阅读全文
1