02 2017 档案

摘要:将位置划分成O(m)段区间,每段最早被阻挡的时间可以用堆维护。 那么每段区间对询问的贡献独立,扫描线处理即可。 时间复杂度O(mlogm)阅读全文
posted @ 2017-02-28 17:00 Claris 阅读(345) 评论(0) 推荐(0) 编辑
摘要:若a1000,则整个f数列会形成O(a)段公差为a的等差数列。 否则a11000,设ai+b=f(i),那么有i=a1f(i)ba1。 交换if(i)的地位,这将形成O(a1)段公差为a1的等 阅读全文
posted @ 2017-02-27 17:38 Claris 阅读(483) 评论(0) 推荐(1) 编辑
摘要:建立后缀树,用线段树合并求出每个节点子树内部最靠前和最靠后的后缀位置以及相邻后缀距离的最大值,同时求出每个子串能完整匹配的最长后缀的长度。 对于一个子串,如果其长度不小于相邻后缀距离的最大值,且最靠后的位置加上最长匹配的后缀长度不小于n,那么就说明可以从中间开始覆盖到尾部。 对串做KMP,求出每 阅读全文
posted @ 2017-02-27 11:27 Claris 阅读(621) 评论(0) 推荐(0) 编辑
摘要:与横线以及竖线的交点个数很容易求,那么只要求出横线竖线交点与运动轨迹的交点数即可。 运动轨迹可以划分成若干条贯穿边界的斜线,对于第一条和最后一条,可以用bitset暴力统计。 对于中间的部分,斜线都是完整的,可以FFT预处理。 时间复杂度O(nlogn+nq32)阅读全文
posted @ 2017-02-26 01:59 Claris 阅读(291) 评论(0) 推荐(0) 编辑
摘要:设f[i][j][k]表示考虑了前i个数字,增加了j根火柴,删掉了k根火柴是否可能,用bitset加速DP。 然后设g[i][j]表示增加了i根火柴,删掉了j根火柴的最小代价,枚举移动次数进行更新。 决策满足单调性,故可以分治求解。 设m=14n,则时间复杂度为$O( 阅读全文
posted @ 2017-02-25 16:13 Claris 阅读(220) 评论(0) 推荐(0) 编辑
摘要:对于ab,如果b=2,那么在[n,n+klogk]内必定能找到k个质数作为a。 筛出n14内的所有质数,暴力枚举所有落在该区间内的倍数,将其筛掉,即可判断每个数是否是质数。 然后以最大的质数的平方作为上界,枚举更大的$ 阅读全文
posted @ 2017-02-25 01:04 Claris 阅读(338) 评论(0) 推荐(0) 编辑
摘要:根据Hall定理,若存在一个区间满足内部需求数>内部石子数,则不存在完美匹配。 由于区间互不包含,所以设: a[i]表示右端点i的区间的容量之和。 b[i]表示左端点i的区间的容量之和。 s[i]表示前i个位置的石子数之和。 则区间[l,r]的: 阅读全文
posted @ 2017-02-22 00:14 Claris 阅读(464) 评论(0) 推荐(0) 编辑
摘要:设f[i]表示i往上通过一趟公交车能到达的深度最小的祖先,这可以通过将公交车按lca深度从小到大排序后用并查集染色得到。 对于每个询问: 1.x==y ans=02.xy的祖先 交换x,y,变成33.yx的祖先: 在f上倍增即可。 $4.x 阅读全文
posted @ 2017-02-21 21:43 Claris 阅读(541) 评论(0) 推荐(0) 编辑
摘要:设f[i][j]表示a[i]改成j时的最小总代价。 若a[i]<A(i1)+1,则不妨将其强行改成A(i1)+1,如此处理之后min(f[n][1..Q])就是答案。 可以发现,对于固定的i来说,f[i][j]从左往右形成一个下凸壳。 观察转移,f[i1] 阅读全文
posted @ 2017-02-21 19:41 Claris 阅读(357) 评论(0) 推荐(1) 编辑
摘要:设最大的数为w,若n>k+logw,那么显然所有1都可以保留,否则现在nk+logw。 如果w100000,那么可以DP,设f[i][j]表示考虑前i个数,保留的数的orj时,最多能删除多少个数,时间复杂度O(nw)。 如果$w> 阅读全文
posted @ 2017-02-20 23:51 Claris 阅读(387) 评论(0) 推荐(0) 编辑
摘要:考虑从0n枚举A的通关楼层。 设f[i]表示B通关i层时C最多能得到多少金币,因为金币数非负,所以也可以看作最多通关多少层。 当A的通关楼层往上多1的时候,这把钥匙必须给A。 如果这把钥匙还剩0把,那么说明: 1.B某些楼层j以上都不能到达,对应 阅读全文
posted @ 2017-02-20 21:46 Claris 阅读(409) 评论(0) 推荐(0) 编辑
摘要:首先,如果这个图本身就不存在欧拉回路,那么显然无解。 对于每个子串: 1.如果里面有不存在的边,那么显然无解。 2.如果里面有一条边重复出现,那么显然也无解。 3.对于每条边,维护其前驱与后继,若前驱或后继超过1个,那么显然也无解。 如此所有边将形成一条条链或者环的结构,如果存在环,那么显然也无 阅读全文
posted @ 2017-02-09 18:03 Claris 阅读(437) 评论(0) 推荐(0) 编辑
摘要:将选手和询问按照年龄排序,即可去掉年龄的限制。 将所有选手按水平排序后维护线段树,显然最优解一定是从大到小贪心选择。 线段树上每个节点维护: g[0/1]:r+1不选/选的时候,l选不选。 c[0/1]:r+1不选/选的时候,中间选了几个。 s[0/1]:r+1不选/选的时候,中间选 阅读全文
posted @ 2017-02-09 16:45 Claris 阅读(218) 评论(0) 推荐(0) 编辑
摘要:将图黑白染色,每个点拆成两个点,分别表示水平和竖直方向,再增加一个点以控制流量,那么每个格子都需要找两个方向去连接。 S到每个黑点的控制点连边,流量2,费用0; 控制点向两个方向的点各连两条边,第一条流量1,费用0,第二条流量1,费用w; 然后两个方向的点分别向对应白点连 阅读全文
posted @ 2017-02-07 19:04 Claris 阅读(319) 评论(0) 推荐(0) 编辑
摘要:设f[i][j][k]表示前i个物品买了j个,消耗k个钻石,最少花多少钱,可以通过简单的DP求出。 枚举拥有的钻石数以及最多能购买的物品数的下界,那么钱数的下界是定值。 将n个箱子折半搜索,按钻石数分组并排序,枚举左半边每种方案,在右半边双指针求出总概率即可。 时间复杂度$O(n 阅读全文
posted @ 2017-02-06 20:42 Claris 阅读(329) 评论(0) 推荐(0) 编辑
摘要:首先预处理出f[i][j][k]表示长度为i的序列,第一个位置是j,最后一个位置是k时合法的方案数。 从后往前枚举LCP以及那个位置应该改成什么。 用线段树维护区间内最左最右的已经确定的位置,以及区间内的合法方案数。 合并的时候只需要将左右儿子的答案乘起来,然后再乘以左儿子最右到右儿 阅读全文
posted @ 2017-02-06 18:17 Claris 阅读(214) 评论(0) 推荐(0) 编辑
摘要:首先预处理出f[i][j]表示第i位是字符j的字符串集合。 考虑枚举答案n,那么模式串中模n相同的字符都要按顺序在同一行出现。 设g[i][j]表示第i列开始出现模nj的那些字符是否有可能,可以通过bitset取交实现。 然后枚举模式串出现的列x进行贪心匹配 阅读全文
posted @ 2017-02-06 17:04 Claris 阅读(195) 评论(0) 推荐(0) 编辑
摘要:考虑二分答案,转化为求有多少lim的数满足条件。 从两侧往中间进行数位DP,设f[l][r][j][x][y][z][pre][suf]表示当前准备填的两个位置是lr,已经有j对相邻的数不同,l1填的是xr+1填的是y,正序串和逆序串的大小关系为$ 阅读全文
posted @ 2017-02-02 21:21 Claris 阅读(201) 评论(0) 推荐(0) 编辑
摘要:将每条双向边拆成两条单向边,若两条边中至少存在一条边使得删掉它之后图中SCC个数不变,则这条边可以定向。 将边中间加上点,变成删点问题。 对于每个SCC单独考虑,随便选择一个不是拆点出来的点S作为源。 则在正图或者反图的Dominator Tree上的所有非叶子节点均会影响连通性。 用Lengaue 阅读全文
posted @ 2017-02-02 16:08 Claris 阅读(287) 评论(0) 推荐(0) 编辑
摘要:不妨设R是唯一可以看到的颜色,考虑一维序列的情况。 设f[i][j][k][x][y]表示考虑了前i个位置,第i个位置的高度是j,最高高度是k,已经用了xRy个非R的方案数,转移则是要么使自己的高度+1,要么考虑下一个位置。 由此可以在O(n5) 阅读全文
posted @ 2017-02-01 14:37 Claris 阅读(239) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示