分块
里阿奴摩西
这个作者很懒,什么都没留下…
展开
-
[带修莫队 权值分块] BZOJ 3196 Tyvj 1730 二逼平衡树
这题有很多算法,我已知:分块+二分:O(n*sqrt(n*log(n))函数式权值分块:O(n*sqrt(n))带修莫队+权值分块:O(n5/3)树套树 我打的莫队+分块,跑的死慢#include#include#include#include#includeusing namespace std;inline char nc(){原创 2016-03-20 19:51:54 · 1224 阅读 · 0 评论 -
[分块] BZOJ 4765 普通计算姬
这就是道打暴力题 不过我偷懒写的复杂度较高 考虑把sumisum_i分成m块 然后我们预处理出每个点对每块的贡献 就可以O(m)O(m)处理修改操作 然后询问 如果我们用树状数组维护子树和 我们可以做到 O(m+nmlogn)O(m+{n\over m} \log n) 我们取 m=nlogn−−−−−√m=\sqrt{n \log n} 复杂度就是 O(nnlogn−−−−−√)O(n\原创 2017-03-07 20:14:14 · 860 阅读 · 0 评论 -
[树状数组套权值线段树 || 分块] BZOJ 2120 数颜色 & BZOJ 2453 维护队列
这个么 直接询问 [l,r][l,r]中 pre<lpre<l 的数就好了#include<cstdio>#include<cstdlib>#include<algorithm>#include<set>using namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==原创 2017-03-13 13:54:01 · 391 阅读 · 0 评论 -
[阈值] SPOJ RECTANGL - Rectangles
详见 一类算法复合的方法大概就是把坐标都离散了 按照某x坐标上的点数分类 如果矩形的某边是大类 只有O(n√)O(\sqrt n) 直接枚举所有点按 y hash就行了 否则所有小类 把所有能构成的线段放进hash表 只有O(nn√)O(n\sqrt n)再一次体验了unordered_map的感人速度#include<cstdio>#include<cstdlib>#include<al原创 2017-04-10 22:05:22 · 429 阅读 · 0 评论 -
[分块 莫比乌斯反演] BZOJ 4815 [Cqoi2017]小Q的表格
那个神奇的关系式 其实是辗转相减的形式 稍微发现下就能知道 这其实是个一维的东西 fa,b=abgcd2(a,b)∗fgcd(a,b),gcd(a,b)f_{a,b}={ab\over gcd^2(a,b)}*f_{gcd(a,b),gcd(a,b)} 然后推一推就知道 ans=∑ni=1fi,i∗g(⌊ni⌋)ans=\sum_{i=1}^n f_{i,i}*g(\lfloor {n\ov原创 2017-04-21 08:20:27 · 579 阅读 · 0 评论 -
[莫队 分块] BZOJ 4866 [Ynoi2017]由乃的商场之旅
这个 只会莫队乱搞 自己YY下 复杂度O(n26∗n−−−−−√)O(n\sqrt{26*n}) 成功贴时限过加时间垫底#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>using namespace std;typedef long long ll;inline char nc(){ static原创 2017-04-24 20:58:41 · 964 阅读 · 0 评论 -
[Segment tree Beats! || 分块] Codeforces 793F Tinkoff Challenge - Elimination Round F. Julia the snail
我们用fif_i表示左边界是ii的答案 一条线段[a,b][a,b]对答案的影响是 f1f_1到flf_l中大于等于aa的都跟bb取max 这个可以用线段树科技做 复杂度证明跟区间最值操作的势能分析应该差不多#include<cstdio>#include<cstdlib>#include<algorithm>#include<cassert>using namespace std;inl原创 2017-05-28 10:59:49 · 1206 阅读 · 0 评论 -
[分块] BZOJ 4908 [BeiJing2017]开车
我们在车的地方加一 在加油站减一 这样答案就是一个类似绝对值的区间和的东西 这个东西不好搞 分块 对于整块加减 我们在块上再维护一个表示0的指针 对于小块 暴力基数排序重构 复杂度O(nn√)O(n\sqrt n)#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>#define pb push_bac原创 2017-05-31 20:17:41 · 1049 阅读 · 0 评论 -
[分块] BZOJ 4867 [Ynoi2017]舌尖上的由乃
这个题啊 分块 每块O(n√)O(\sqrt n) 把每个块内出现次数做一个前缀和,方便二分的时候O(1)查 然后整块加就打标记,两边零散的,变化不超过10,那么就直接在前缀和数组上修改下 复杂度大概是O(nn√logn+nn√×10)O(n\sqrt n\log n+n\sqrt n\times 10) 还有个问题是前缀和存不下?其实是存的下的,我们只要求从最小值开到最大值就好了,每次整块原创 2017-06-17 18:42:07 · 885 阅读 · 0 评论 -
[分块 随机Hash] Romanian IOI 2017 Selection #6 Jolteon
传送门问有多少个区间,出现过的数出现次数都是奇数 给每个数随机一个hash值 然后区间中所有数的xor和 和 所有pre<l≤i≤rpre< l \le i \le r的数的异或和 相同 那么就合法 枚举右端点,新增一个数会对一段造成影响 变成区间异或,区间是否存在一个数,分块维护#include<cstdio>#include<cstdlib>#include<algorithm>原创 2017-07-01 22:41:16 · 817 阅读 · 0 评论 -
[分块] Codeforces 436F Zepto Code Rush 2014 F. Banners
可以转化成区间加,询问ai×ia_i\times i的最大值 这个不好维护,分块,零散的加,直接重构整块,否则在块上打标记 同时我们在块上还要维护当前最大值所在的 ii 和 接下来至少要整块加多少次才能使得最大值变化 每次在块上打标记,当达到临近就重构更新最大值,注意这个最大值随着全局加肯定是单调右移的,那么重构复杂度也是对的#include<cstdio>#include<cstdlib>原创 2017-07-11 22:09:21 · 357 阅读 · 0 评论 -
[分块] BZOJ 2724 [Violet 6]蒲公英
先填个坑 有时间再去看CLJ的题解 CLJ题解里有这样的一个定理 令mode(S)mode(S)为可重集合SS的众数 mode(A⋃B)∈mode(A)⋃B mode(A \bigcup B) \in mode(A) \bigcup B 证明 如果t∉mode(A)⋃Bt \notin mode(A) \bigcup B 那么tt在 mode(A⋃B) mode(A \bigcu原创 2017-03-10 15:56:08 · 295 阅读 · 0 评论 -
[生成函数 FFT 分块] BZOJ 3509 [CodeChef] COUNTARI
学着大神优化了FFT常数:http://blog.csdn.net/geotcbrl/article/details/50636401可以看出来这是个生成函数暴力的话是N次FFT 然后考虑分块 B次FFT + 块内统计#include#include#include#include#include#define cl(x) memset(x,0,sizeo原创 2016-04-21 13:55:29 · 791 阅读 · 0 评论 -
[分块 阈值 离线] BZOJ 3351 [ioi2009]Regions
这个题啊 自己刚了三小时树分块 没什么卵用 我就说 怎么会有题出树分块那么的话 我们对询问 (a,b)(a,b) 按照 b 这种颜色在树上的出现次数分类 阈值设为n√\sqrt n如果b出现次数 < n√\sqrt n 那么我们暴力对每个为b的点询问一通 在dfs时边记录边询问可以做到 O(qn√)O(q\sqrt n)然后如果 b出现次数 > n√\sqrt n 那么这种b最多只有 n√\sq原创 2017-02-19 14:13:44 · 657 阅读 · 0 评论 -
[分块 随机化] BZOJ 2223 [Coci 2009]PATULJCI
不会主席树 分块加随机化卡时过但是另一道双倍经验就过不去啦233这个坑以后再填#include#include#include#includeusing namespace std; inline char nc(){ static char buf[100005],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=bu原创 2016-04-18 18:24:32 · 438 阅读 · 0 评论 -
[分块] BZOJ 4241 历史研究
分块但是莫队套分块似乎更快?#include#include#include#include#include#define cl(x) memset(x,0,sizeof(x))using namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*原创 2016-06-22 18:35:53 · 345 阅读 · 0 评论 -
[可持久化字典树 分块] BZOJ 2741 【FOTILE模拟赛】L
先异或取前缀和最大异或值 可持久化字典树然后么 区间问题 分块用f[i][j] 表示 第i块中的数与i-j块的数的最大异或值 然后边角处理下复杂度一个根号一个log#include#include#include#includeusing namespace std;typedef long long ll; inline char nc(){原创 2016-05-15 12:57:55 · 646 阅读 · 0 评论 -
[分块 并查集] BZOJ 4537 [Hnoi2016]最小公倍数
题解:http://www.cnblogs.com/y7070/p/5412793.html暴力分块”对于每一组,将符合一组a的询问选出来,将这些询问和这一块之前的边(a一定小于这些询问)按b排序,然后交替插入,询问,对于一个询问,在当前块也有可能有满足的边,我们将其加入,考虑后并撤销“#include#include#include#include原创 2016-04-22 10:23:24 · 635 阅读 · 0 评论 -
[LCT || 分块] IOI 2011 Elephants
分块做法 fhq OrzLCT做法 rzz Orz#include#include#include#include#includeusing namespace std;typedef pair abcd;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; i原创 2016-07-07 22:04:00 · 582 阅读 · 0 评论 -
[分块 暴力 树] BZOJ 4381 [POI2015]Odwiedziny
大概就是步数小的预处理前缀和步数大的直接倍增跳各种细节搞得欲仙欲死#include#include#include#include#includeusing namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p原创 2016-09-04 07:54:01 · 414 阅读 · 0 评论 -
[分块] BZOJ 2122 工作评估
比较好的一道分块题重要结论F(i,j,x0)=min( G(i,j), x0+S(i,j))详见:http://blog.csdn.net/u011542204/article/details/51504804#include#include#include#include#include#define dprintf(...) fprintf(stderr,__VA原创 2016-09-23 17:11:46 · 987 阅读 · 0 评论 -
[五维偏序 分块 bitset] HihoCoder #1236 2015北京网络赛 J Scores
题目链接:http://hihocoder.com/problemset/problem/1236?sid=873407求五维偏序,强制在线b[i][j]表示第i维前j块的状态#include#include#include#include#include#define dprintf(...) fprintf(stderr,__VA_ARGS__)原创 2016-09-15 09:54:54 · 700 阅读 · 0 评论 -
[SPFA 分块建图] BZOJ 4070 [Apio2015]雅加达的摩天楼
最坏情况有n^2条边,一般最短路算法都不能过。考虑用分块的思想来优化建图。Pi>sqrt(n),暴力加入每一条边,每次最多sqrt(n)条边。Pi≤sqrt(n),对于每个点添加sqrt(n)个辅助点,一层一层走,边数是O(n*sqrt(n))的。总边数和总点数都是O(n*sqrt(n))。块不能太大 不然爆内存 块最大100#include#include#i原创 2016-05-04 13:40:57 · 684 阅读 · 0 评论 -
[分块 块的分裂 || 替罪羊树套线段树] BZOJ 3065 带插入区间K小值
省选时收了分块大师的教导于是用分块过了这题 当时竟然没有发上来具体快忘完了 只是记得分裂什么的#include#include#include#includeusing namespace std;typedef pair abcd; inline char nc(){ static char buf[100000],*p1=buf,*p2=buf;原创 2016-12-25 14:10:31 · 588 阅读 · 0 评论 -
[DP 分块] UOJ #300. 【CTSC2017】吉夫特
DP的转移是一个子集和的形式 直接做是3183^{18} 按照高9位 低9位分块可以做到29×39=692^9\times 3^9=6^9#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;#define read(x) scanf("%d",&(x))const int N=1<<18;cons原创 2017-07-23 13:15:37 · 713 阅读 · 0 评论