
分块 & 阈值
LowestJN
强省弱OIer
展开
-
[BZOJ3509][CodeChef][FFT][分块]COUNTARI
分块FFT练习题#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>#include <string>#include <cmath>#define N 200010using namespace std;typedef long long ll;struct E{ double real原创 2017-02-23 15:37:50 · 562 阅读 · 0 评论 -
[莫队 分块] LOJ#6273. 郁金香
区间询问,用莫队处理记录每种颜色出现的次数,然后令 si" role="presentation">sisis_i 表示当前区间有多少种颜色出现次数在 (i−1)∗S+1∼i∗S" role="presentation">(i−1)∗S+1∼i∗S(i−1)∗S+1∼i∗S(i-1)*S+1\sim i*S 之间,这样就可以 O(nS+S原创 2018-02-03 16:28:15 · 321 阅读 · 0 评论 -
[分块 回文自动机] LOJ#6070. 「2017 山东一轮集训 Day4」基因
回文自动机那套理论可以在 翁文涛的集训队论文 里看每个串的回文自动机形态是固定的,一个子串的回文自动机也就是一个子图那么就可以用记忆化的方式来降低复杂度……我感觉好像就是论文里提到的“不基于势能分析的插入方法“#include <cstdio>#include <iostream>#include <algorithm>#include <vector>#include <map>#inc原创 2017-10-14 06:46:56 · 899 阅读 · 0 评论 -
[阈值 二进制分组 && AC自动机]HDU4787. GRE Words Revenge
如果不强制在线,那么可以分治,所以想到可以二进制分组。 但是询问总长度是 5×1065\times 10^6,乘个log看着虚…可以只建两个AC自动机,当其中一个AC自动机的节点数超过某个值的时候,就把这个自动机与另一个合并,这样询问的总复杂度就是线性的,插入复杂度是O(nL−−√)O(n\sqrt L)的#include <cstdio>#include <iostream>#include原创 2017-09-25 16:42:44 · 609 阅读 · 0 评论 -
[字符串HASH && 阈值]Codeforces 741E.Arpa’s abnormal DNA and Mehrdad’s deep interest
传送门 这题写的心态都崩了…被卡常被卡HASH首先可以把每个位置插入T后的字典序排序出来。 发现两个不同的位置i,j中插入T,两个字符串有一段前缀一段后缀是相同的,中间可以按T的端点分成3部分,只要比较这3部分的字典序就可以了。我被卡常就是因为用了字符串hash来比较字典序…那么写一个比较函数,然后直接用std::sort就好了询问也很麻烦。 发现第二个限制可以写成x+⌊ik⌋×k≤i≤y+⌊原创 2017-08-28 13:21:55 · 811 阅读 · 0 评论 -
[计数 补集转换][阈值] Codechef SEAARC.Sereja and Arcs
传送门 %%%度神 很强的计数题 题目就是求形如ABAB的个数,发现这个很难求,补集转换一下,答案就是总数减去AABB和ABBA的个数 求总数很简单,就是∏i=1n(ai2)\prod_{i=1}^n{a_i\choose 2}aia_i是第i中颜色个数 AABB的个数可以枚举p,然后用颜色的前后缀和求出来。 重点就是求ABBA了 直接求还是不好求,可以设一个阈值 SS BigBig原创 2017-08-15 15:45:22 · 716 阅读 · 1 评论 -
[分块][数学][瞎搞]Codeforces Round #424 .C Bamboo Partition
刚开始的做法是对的…然而越做头越昏,竟然用错误的例子把自己叉掉… 还好最后半个小时清醒了先列出式子要求最大的d满足 ∑i=1nd−((ai−1)%d+1)≤k\sum_{i=1}^n d-((a_i-1)\%d +1)\leq k 其中ai要先减一再取模是为了防止ai是d的倍数的情况,再推一推n×d−∑i=1nai−⌊ai−1d⌋×d≤kn\times d-\sum_{i=1}^n a_i-\原创 2017-07-16 17:22:33 · 836 阅读 · 0 评论 -
[背包DP][小技巧] LOJ#6089. 小 Y 的背包计数问题 && 51NOD 1597 有限背包计数问题
很妙的想法啊体积小于m−−√\sqrt m的多重背包加个前缀和优化,大于m−−√\sqrt m的完全背包具体看这里写链接内容没有Manchery都快不会做题了……#include <cstdio>#include <iostream>#include <algorithm>using namespace std;const int N=100010,M=330,P=23333333;int n,原创 2017-07-06 20:31:31 · 660 阅读 · 0 评论 -
[分块][哈希] [Romanian IOI 2017 Selection #6] Jolteon && [LOJ #6187] Odd
在loj上看到的题,跟CF77F差不多 但是这不是一个线段,而是一些数字,就不能用同样的方法hash,问了大佬Manchery,恰好他一周前做过……传送门不过loj上数据更强吧…我Hash打错调了一晚上……#include <cstdio>#include <iostream>#include <algorithm>#include <cmath>#include <string>#in原创 2017-07-06 00:51:41 · 1123 阅读 · 0 评论 -
[后缀自动机][分块]HackerRank Week of Code 30 .Substring Queries
题意是给出n个字符串,有Q组询问,每次询问第x和第y个字符串的最长公共子串感觉这题会后缀自动机就挺水了… 因为字符串总长<=1e5,所以第一反应就可以分块 首先对每个串建后缀自动机因为后缀自动机可以O(串长)求出两个串的最长公共子串,所以如果询问的两个串有一个串长小于sqrt(总串长),那么直接在较长串的后缀自动机上查询就可以了。那如果有两个串都大于sqrt(总串长)呢 依然可以暴力查询,只不原创 2017-07-14 18:10:17 · 799 阅读 · 0 评论 -
[分块] Codeforces 436F && Zepto Code Rush 2014 F. Banners
考虑从大到小枚举c,考虑把bi>=c的人删去,然后就要求一个p使p*x最大,x为满足ai>=p的i的个数。 考虑把1~max(ai)分块,每块可以就出块中的最大值,然后要维护每块答案,当一块内的最大值要变化的时候暴力重构整个块,零碎的也暴力重构,因为快内最大值最多变化块的大小次,所以总复杂度均也就是O(nn√)O(n\sqrt n)的。题解的做法很短,我就没有去实践了…… 题解做法可以看这篇考场原创 2017-07-10 23:11:19 · 594 阅读 · 0 评论 -
[BZOJ Contest-2017省队十连测推广赛1·T1][BZOJ4765][分块][dfs序]普通计算姬
考虑对1~n的序列分块令每个点在序列中的贡献aia_i为ii为根的子树的权值和,那么分块后可以求出块j的贡献和sumjsum_j,那么对于一个询问[l,r][l,r],这个区间里完整的块的答案可以扫一遍sumsum数组求出来,这样复杂度是O(n−−√)O(\sqrt n),剩下的点暴力求出这个点单个的贡献。怎么求单个点的贡献呢 可以用dfs序来维护子树的权值和,那么只用在dfs序上用树状原创 2017-03-07 20:27:49 · 1263 阅读 · 0 评论 -
[BITSET 分块] BZOJ5087. polycomp
陈老师神题×2因为多项式的系数是0/1,那么可以用bitset压位优化但是 O(n332)" role="presentation">O(n332)O(n332)O({n^3\over 32}) 不够优考虑每十位分一个块,令 gS=∑i=09Sibi" role="presentation">gS=∑9i=0SibigS=∑i=09Sibig_{S}=\sum_{i=0}原创 2018-01-28 19:13:09 · 609 阅读 · 0 评论