01 2016 档案
摘要:对于一个所选任务集合,如果对于任意时刻,前面所选任务数都不超过i的话,那么这些任务可以全选。 维护一棵线段树,第个位置一开始为,每使用一个任务,都要减。 插入一个任务: 首先查询的区间内第一个的位置,记为。 如果没有,
阅读全文
摘要:对于一个合法的十进制数,它的所有后缀也是合法的。于是按位BFS,保留前导零,每次往前添加一个或者,直到找到第个不含前导零的合法数为止即可。时间复杂度。#include#define N 400struct Num{ int len,v[N]; Num(){for(...
阅读全文
摘要:考虑给定每个数字的个数,构造出这个序列:肯定是1 2 1 2 3 2 3 2 3 4 3 4 ... 最大值,或者1 2 1 2 3 2 3 2 3 4 3 4 ... 最大值 最大值-1。本质不同的情况只有这两种,且互相不交。设最大值为,那么到都要有个,剩下的数每多一个$i...
阅读全文
摘要:如果两个矩形相交且不是包含关系,那么完全可以让它们不相交。将坐标离散化后,设表示区间纵坐标不小于的部分的最优解。对于,要么枚举分割线,分成两部分分别DP,要么放入一个尽量大的矩形,转化为子区间的问题。时间复杂度。#i...
阅读全文
摘要:将所有点极角排序,建立线段树,线段树每个节点维护该区间内所有点组成的上下凸壳。对于一个查询,二分查找出相应区间的左右端点,在线段树上得到个节点,在相应凸壳上三分查找出与斜边叉积最大的那个点,看看是否为正即可。时间复杂度。#include#include...
阅读全文
摘要:将所有权值离散化,建立权值线段树,维护区间内数字个数以及对数的和,用于比较乘积大小。对于每个连通块维护一棵权值线段树,合并时用线段树合并。对于操作3和4,暴力删除所有不合法节点,然后一并修改后插入线段树即可。时间复杂度。#include#include#includeusin...
阅读全文
摘要:杨氏图表,维护若干个单调不下降队列。每次新加入一个数时,先考虑第一个队列:如果可以放在最后,则放在最后。否则找到最小的可以替换的替换掉,再将替换的数放入第二个队列,以此类推。最后。时间复杂度。#include#define ...
阅读全文
摘要:因为与互质,所以对于到里每个,的值互不相同。设匹配成功的起点为,那么可以得到段的值不能取的禁区,每段都是连续区间。再枚举到的起点,这些单点也是禁区。找出所有禁区后,答案就是这些禁区的并...
阅读全文
摘要:首先将的约数从小到大排序,设表示当前可以选第个到第个约数,还要选个,之前选的乘积为是否可能。爆搜的时候,如果从开始最小的个相乘也超过了,那么就不合法,加上这个剪枝即可。#include#include#define N 2000...
阅读全文
摘要:对于每个询问,首先可以通过扫描线+线段树求出四个方向的第一个点,询问范围等价于框住这些点的最小矩形。对于一个点,预处理出::往左下角按凸壳走到时,凸壳上相邻两点的叉积和。:往右下角按凸壳走到时,凸壳上相邻两点的叉积和。$C[i][j]...
阅读全文
摘要:首先对所有单词建立AC自动机,是的子串等价于的某个前缀通过链可以走到的终止节点,即的终止节点是某个前缀在树上的祖先。设表示考虑了前个单词,且第个单词必选时子序列价值的最大值,则$f[i]=\max(单词i每个前缀的贡...
阅读全文
摘要:将选取的看成左括号,看成右括号,那么答案是一个合法的括号序列。那么只要重复取出对价值最小的左右括号,保证每时每刻都是一个合法的括号序列即可。将看成,看成,设为前缀和。如果当前取出的是,那么对前缀和的影响为区间加。如...
阅读全文
摘要:首先求出后缀数组,得到本质不同的子串的个数。然后二分答案,每次先通过后缀数组求出第小的子串,然后贪心进行检验。检验的时候,从后往前贪心,每次加入一个后缀,如果不能加了,那就划为一段。时间复杂度。#include#include#include#define N 10...
阅读全文
摘要:枚举串的每个后缀,统计出该后缀所有满足条件的前缀。考虑暴力搜索,设状态表示当前需要考虑从开始的后缀,从开始的后缀,之前部分编辑距离为。那么首先用后缀数组+ST表求出两个后缀的lcp,和都可以向右跳那么多,且不产生任何代价。如果此时匹配...
阅读全文
摘要:Link-Cut Tree维护。每个点x维护以下信息:v:这个点的点权s:实链上的信息和st:子树信息和(不包括链上)sa:子树+链上的信息和as:所有虚儿子的sa的和则有s[x]=v[x]+s[son[x][0]]+s[son[x][1]]st[x]=as[x]+st[son[x][0]]+st[...
阅读全文
摘要:注意到这个过程实质就是prim算法求最大生成树的过程。首先通过离散化+线段树将个点缩为上下各个点。设已加入集合为,未加入集合为。建立两棵线段树,维护所有在集合中的点,以及从每个点连出去的边。用一个大根堆维护所有横跨的边。每次取出堆顶的边,取出与这条边相...
阅读全文
摘要:过去的2015这一年,感觉非常漫长,发生了好多好多的事情。1月,翻译某道POI的时候被lavendir发现不是BZOJ权限用户,结果他居然把权限免费送给了我!打开了新世界的大门。2月,寒假写完作业无聊着没事干,随便切了几道水题,被家长发现,“离高考只有几个月了,要安心学习”,于是家长就开始监控我的提...
阅读全文