随笔分类 - 分治--CDQ
摘要:题面 "传送门" Sol 设$f[i]$表示$i$到根的最小代价 $f[i]$可以由$f[j]$转移而来,要求$j$为$i$的父亲,并且满足距离限制 显然$DP$式可以斜率优化 然而这是在树上,并且每次都要一个$i$往上的若干个点的凸包 可以考虑维护区间凸包,可以用线段树 或者$CDQ$分治 $CD
阅读全文
摘要:题面 "传送门" Sol 每个导弹有时间,高度,速度 求时间递增,高度,速度不降的最长的序列 然后还要求最长序列的方案以及每个导弹在最长序列中的方案 这个就是偏序问题辣,正反两遍求出每个导弹为结尾开头的序列最长长度 判断是否在最长序列就二者相加判断 然后记录下方案,用$double$,$long\
阅读全文
摘要:题面 "传送门" Sol 题目都说了 必然存在一种最优的买卖方案满足: 每次买进操作使用完所有的人民币; 每次卖出操作卖出所有的金券。 设$f[i]$表示第$i$天可以有的最大钱数 枚举$jb_iY_k+a_iX_k$$ 假设$k\frac{Y_j Y_k}{X_j X_k}$$ 设$K_i=\fr
阅读全文
摘要:题面 "传送门" Sol 处理出每个数$p[i]$最大能变成多少和最小能变成多少$mx[i], mn[i]$ 设$f[i]$表示到第$i$个位置的最长的满足要求的序列 $f[i]=max(f[j])+1$满足$mx[j]\le p[i]$且$p[j] \le mn[i]$ 然后这个东西类似三维偏序,
阅读全文
摘要:题面 "传送门" Sol $CDQ$分治 先对$x$排序,对$y$在$CDQ$分治是从大到小排序 从大到小加入,右边用单调栈维护$x$递增,$y$递减的序列 左边就是找到$x$比它大,最小的$y$(树状数组解决) 再在右边找到最后一个小于这个$y$的位置,那么栈顶到这个位置都是答案 cpp incl
阅读全文
摘要:题目 "Cogs" ~~没有Bzoj的权限号~~ Sol 离线,$CDQ$分治,把询问拆成$4$个,变成每次求二维前缀和 那么只要一个修改操作(关键字为时间,$x$,$y$)都在这个询问前,就可以累计答案 那么就成了偏序问题了,直接$CDQ$ 注意当$x$相等时要把修改丢在前面 cpp includ
阅读全文
摘要:CDQ套CDQ或者CDQ套树套树 前者快于后者然而我写了后者 # include <stdio.h> # include <stdlib.h> # include <iostream> # include <algorithm> # include <string.h> # define IL in
阅读全文
摘要:CDQ分治或树套树可以切掉 CDQ框架: 先分 计算左边对右边的贡献 再和 所以这个题可以一维排序,二维CDQ,三维树状数组统计 CDQ代码 # include <stdio.h> # include <stdlib.h> # include <iostream> # include <algori
阅读全文
摘要:CDQ分治 把删除转变为逐个添加,于是就变成了三维偏序问题 时间,位置,大小 分两遍统计即可 # include <stdio.h> # include <stdlib.h> # include <iostream> # include <algorithm> # include <string.h
阅读全文