上一页 1 ··· 18 19 20 21 22 23 24 25 26 ··· 38 下一页
摘要: 把环倍长,设$w(i,j)$表示对于$i$,决策$j$的价值,如果$j$在$[i,i+n]$,那么$w(i,j)=dis(i,j)$,否则$w(i,j)=-dis(i,j)$。 则$w$满足四边形不等式,最优决策满足完全单调性,分治求解即可。 时间复杂度$O(n\log n)$。 #include< 阅读全文
posted @ 2016-01-31 22:36 Claris 阅读(889) 评论(0) 推荐(0) 编辑
摘要: 对于一个所选任务集合,如果对于任意时刻$i$,$i$前面所选任务数都不超过i的话,那么这些任务可以全选。 维护一棵线段树$T$,第$i$个位置一开始为$i$,每使用一个任务,$[t,T]$都要减$1$。 插入一个任务: 首先查询$[t,T]$的区间内第一个$0$的位置,记为$k$。 如果没有$0$, 阅读全文
posted @ 2016-01-30 01:35 Claris 阅读(810) 评论(2) 推荐(0) 编辑
摘要: 设$f[i]$表示长度为$i$的不下降子序列的个数。 考虑容斥,对于长度为$i$的子序列,如果操作不合法,那么之前一定是一个长度为$i+1$的子序列,所以答案$=\sum_{i=1}^n(f[i]\times (n-i)!-f[i+1]\times (n-i-1)!\times (i+1))$。 时 阅读全文
posted @ 2016-01-28 23:41 Claris 阅读(698) 评论(0) 推荐(0) 编辑
摘要: 对于一个合法的十进制数,它的所有后缀也是合法的。于是按位BFS,保留前导零,每次往前添加一个$0$或者$1$,直到找到第$n$个不含前导零的合法数为止即可。时间复杂度$O(nl)$。#include#define N 400struct Num{ int len,v[N]; Num(){for(... 阅读全文
posted @ 2016-01-25 01:03 Claris 阅读(794) 评论(0) 推荐(0) 编辑
摘要: 考虑给定每个数字的个数,构造出这个序列:肯定是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。本质不同的情况只有这两种,且互相不交。设最大值为$m$,那么$1$到$m$都要有$1$个,剩下的数每多一个$i... 阅读全文
posted @ 2016-01-21 23:02 Claris 阅读(1235) 评论(0) 推荐(2) 编辑
摘要: 如果两个矩形相交且不是包含关系,那么完全可以让它们不相交。将坐标离散化后,设$f[i][j][k]$表示区间$[i,j]$纵坐标不小于$k$的部分的最优解。对于$f[i][j][k]$,要么枚举分割线,分成两部分分别DP,要么放入一个尽量大的矩形,转化为子区间的问题。时间复杂度$O(n^4)$。#i... 阅读全文
posted @ 2016-01-21 00:23 Claris 阅读(602) 评论(0) 推荐(1) 编辑
摘要: 将所有点极角排序,建立线段树,线段树每个节点维护该区间内所有点组成的上下凸壳。对于一个查询,二分查找出相应区间的左右端点,在线段树上得到$O(\log n)$个节点,在相应凸壳上三分查找出与斜边叉积最大的那个点,看看是否为正即可。时间复杂度$O(n\log^2n)$。#include#include... 阅读全文
posted @ 2016-01-20 21:42 Claris 阅读(316) 评论(0) 推荐(0) 编辑
摘要: 将所有权值离散化,建立权值线段树,维护区间内数字个数以及对数的和,用于比较乘积大小。对于每个连通块维护一棵权值线段树,合并时用线段树合并。对于操作3和4,暴力删除所有不合法节点,然后一并修改后插入线段树即可。时间复杂度$O(m\log m)$。#include#include#includeusin... 阅读全文
posted @ 2016-01-20 01:05 Claris 阅读(865) 评论(0) 推荐(0) 编辑
摘要: 杨氏图表,维护若干个单调不下降队列。每次新加入一个数时,先考虑第一个队列:如果可以放在最后,则放在最后。否则找到最小的可以替换的替换掉,再将替换的数放入第二个队列,以此类推。最后$ans_i=\sum_{j=1}^i t_j$。时间复杂度$O(n^2\log n)$。#include#define ... 阅读全文
posted @ 2016-01-19 23:54 Claris 阅读(349) 评论(0) 推荐(0) 编辑
摘要: 因为$a$与$n$互质,所以对于$0$到$n-1$里每个$i$,$ai\bmod n$的值互不相同。设匹配成功的起点为$i$,那么可以得到$3m$段$ai\bmod n$的值不能取的禁区,每段都是连续区间。再枚举$n-m+1$到$n-1$的起点,这些单点也是禁区。找出所有禁区后,答案就是这些禁区的并... 阅读全文
posted @ 2016-01-14 22:36 Claris 阅读(860) 评论(5) 推荐(0) 编辑
摘要: 首先将$n$的约数从小到大排序,设$dfs(x,y,z)$表示当前可以选第$x$个到第$m$个约数,还要选$y$个,之前选的乘积为$z$是否可能。爆搜的时候,如果从$x$开始最小的$y$个相乘也超过了$n$,那么就不合法,加上这个剪枝即可。#include#include#define N 2000... 阅读全文
posted @ 2016-01-12 23:35 Claris 阅读(696) 评论(0) 推荐(0) 编辑
摘要: 对于每个询问,首先可以通过扫描线+线段树求出四个方向的第一个点,询问范围等价于框住这些点的最小矩形。对于一个点$i$,预处理出:$A[i][j]$:$i$往左下角按凸壳走到$j$时,凸壳上相邻两点的叉积和。$B[i][j]$:$i$往右下角按凸壳走到$j$时,凸壳上相邻两点的叉积和。$C[i][j]... 阅读全文
posted @ 2016-01-12 22:09 Claris 阅读(451) 评论(0) 推荐(4) 编辑
摘要: 首先对所有单词建立AC自动机,$S$是$T$的子串等价于$T$的某个前缀通过$fail$链可以走到$S$的终止节点,即$S$的终止节点是$T$某个前缀在$fail$树上的祖先。设$f[i]$表示考虑了前$i$个单词,且第$i$个单词必选时子序列价值的最大值,则$f[i]=\max(单词i每个前缀的贡... 阅读全文
posted @ 2016-01-12 18:40 Claris 阅读(617) 评论(0) 推荐(0) 编辑
摘要: 将选取的$A$看成左括号,$B$看成右括号,那么答案是一个合法的括号序列。那么只要重复取出$k$对价值最小的左右括号,保证每时每刻都是一个合法的括号序列即可。将$($看成$1$,$)$看成$-1$,设$s[]$为前缀和。如果当前取出的是$()$,那么对前缀和的影响为$[A,B-1]$区间加$1$。如... 阅读全文
posted @ 2016-01-12 16:57 Claris 阅读(1697) 评论(1) 推荐(2) 编辑
摘要: 二分一个最大的位置$x$,计算$t=\sum_{i=1}^k\lfloor\frac{x}{a_i}\rfloor$。如果$t\leq n$,那么说明就算全部检票员都走到了这里,也不够$n$个指令,所以可以先将所有检票员尽量向$x$位置走,并将用掉的指令数扣除。然后将$x$适当往前调整,使得每个检票... 阅读全文
posted @ 2016-01-11 16:47 Claris 阅读(576) 评论(0) 推荐(0) 编辑
摘要: 首先求出后缀数组,得到本质不同的子串的个数。然后二分答案,每次先通过后缀数组求出第$mid$小的子串,然后贪心进行检验。检验的时候,从后往前贪心,每次加入一个后缀,如果不能加了,那就划为一段。时间复杂度$O(n\log n)$。#include#include#include#define N 10... 阅读全文
posted @ 2016-01-10 20:35 Claris 阅读(1188) 评论(0) 推荐(2) 编辑
摘要: 设$pre[i]$表示第$i$个数上一次出现的位置,$d[i]=abs(a[i]-a[i+1])$。用线段树维护区间内$a$的最小值、最大值,$pre$的最大值以及$d$的$\gcd$。对于询问$l\ r\ k$,首先特判掉$l=r$或者$k=0$的情况。然后求出区间最小值和最大值、以及$pre$的... 阅读全文
posted @ 2016-01-08 19:01 Claris 阅读(1269) 评论(0) 推荐(0) 编辑
摘要: 枚举$B$串的每个后缀,统计出该后缀所有满足条件的前缀。考虑暴力搜索,设状态$(x,y,z)$表示当前需要考虑$A$从$x$开始的后缀,$B$从$y$开始的后缀,之前部分编辑距离为$z$。那么首先用后缀数组+ST表求出两个后缀的lcp,$x$和$y$都可以向右跳那么多,且不产生任何代价。如果此时匹配... 阅读全文
posted @ 2016-01-06 20:14 Claris 阅读(689) 评论(0) 推荐(1) 编辑
摘要: 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[... 阅读全文
posted @ 2016-01-06 00:50 Claris 阅读(589) 评论(1) 推荐(0) 编辑
摘要: 注意到这个过程实质就是prim算法求最大生成树的过程。首先通过离散化+线段树将$A+B$个点缩为上下各$O(n)$个点。设已加入集合为$S$,未加入集合为$T$。建立两棵线段树,维护所有在$T$集合中的点,以及从每个点连出去的边。用一个大根堆维护所有横跨$ST$的边。每次取出堆顶的边,取出与这条边相... 阅读全文
posted @ 2016-01-04 21:55 Claris 阅读(442) 评论(0) 推荐(0) 编辑
上一页 1 ··· 18 19 20 21 22 23 24 25 26 ··· 38 下一页