
分块
ws_yzy
一如OI情似海
展开
-
BZOJ 2002: [Hnoi2010]Bounce 弹飞绵羊|分块
第一次写分块,似乎好厉害的样子 把弹力装置分为block=sqrt(n)块 分别为0…block-1,block…2*block-1,…… 然后记录一下这一个点弹到下一个块的点的位置和次数 代码好短#include<set>#include<map>#include<ctime>#include<queue>#include<cmath>#include<cstdio>#incl原创 2016-01-22 15:39:07 · 674 阅读 · 0 评论 -
2670: Almost|分块|三分
先处理出前缀和sumisum_i 区间[l..r][l..r]的几乎平均数为sumr−suml−1r−l\frac{sum_r-sum_{l-1}}{r-l} 也就是求一个斜率的最大值,假如左端点确定,找一个右端点使得几乎平均数最大的话,可以求出凸包,然后再凸包上3分找到最大值 然后就可以分块设立TT个关键点求出每个点到关键点这个区间的最大的几乎平均数 询问的时候可以先拽出跨过关键点的答案,原创 2016-04-26 16:17:39 · 1134 阅读 · 0 评论 -
BZOJ 4407: 于神之怒加强版|莫比乌斯反演
不会搞数学公式很苦恼!! flag:会写数学公式之后一定好好写一发题解 非常感谢龙爷(sd第一男选手!!可惜神犇都不写blog)提供线性筛做法 2.16————————————————- 一下均设n<=mn<=m Ans=∑i=1n∑j=1mgcd(i,j)kAns=\sum_{i=1}^{n}\sum_{j=1}^{m}gcd(i,j)^k 设f(d)f(d)为gcd(x,y)=dgc原创 2016-02-15 20:34:47 · 1858 阅读 · 0 评论 -
BZOJ 2738: 矩阵乘法|分块|整体二分
对所有数先排序然后每次插入n个数,然后处理每个询问 如果子矩阵中的数大于k则一定答案一定在这n个数当中,然后暴力查找#include<algorithm>#include<iostream>#include<cstring>#include<cstdlib>#include<cstdio>#include<vector>#include<queue>#include<cmath>#原创 2016-03-02 15:25:40 · 600 阅读 · 1 评论 -
BZOJ 4401: 块的计数|树分块
首先,块的大小确定的话,可以发现方案最多只有1种 By神犇wangyurzee7有了这个结论后就非常好做了,记录一下当块的大小为x时,可以做块的根的数量,即满足x|size[i]的i的数量,可以考虑nlogn的线性筛的做法#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<queue>#原创 2016-02-15 07:31:37 · 839 阅读 · 0 评论 -
BZOJ 3809: Gty的二逼妹子序列|莫队算法|分块
这题还卡树状数组,一把辛酸泪啊! 考虑维护每个颜色用分块,修改是O(1)查询是sqrt(n) Code:分块#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<iostream>#include<algorithm>#include<queue>#include<vector>#inc原创 2016-01-24 08:00:17 · 496 阅读 · 0 评论 -
BZOJ 3720: Gty的妹子树|树分块
把树分成大小为sqrt(n)的块 如果x的fa[x]所属的块大小等于根号n了,那么久新开一块否则就属于fa[x]的块 每一块内把数排序,询问时块内二分查找,块外暴力#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<queue>#include<vector>#include<set>#原创 2016-01-23 17:03:00 · 1148 阅读 · 2 评论 -
BZOJ 3744: Gty的妹子序列|分块|树状数组
题解见 http://blog.youkuaiyun.com/ws_yzy/article/details/50569655#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<queue>#include<vector>#include<set>#include<map>#include<iostre原创 2016-01-23 14:56:16 · 1529 阅读 · 0 评论 -
BZOJ 3289: Mato的文件管理|分块|树状数组
我不是学了莫队算法了吗,怎么又傻逼在线做了,代码又丑跑得又慢 题意很明确了,就是求区间中逆序对的数量 好吧,这个题莫队算法算是遍大街了,说一下直接分块怎么做 预处理出块到块的答案和从头到每一个块的树状数组 接下来就是询问,如果区间没有跨过一个整块,那就用暴力大法 否则,就先统计块中的答案,两侧的答案分开统计 一开始sb了,对每一个块维护了一个树状数组,然后每次查询都退化到sqrt(n)*原创 2016-01-23 14:26:06 · 908 阅读 · 0 评论 -
BZOJ 2038: [2009国家集训队]小Z的袜子(hose)|分块|莫队算法
似乎莫对算法才是正确的的姿势 不过直接分块暴力也可以 需要与处理几个东西和作诗那个题非常的相似,只不过那个题是强制在线的 维护到从开始每一个块的颜色的前缀和,块到块之间的答案 询问的时候,不跨过块就排序暴力判断,跨过块就先统计整块的答案,然后把两边的的单独排序暴力更新答案 学了莫队之后似乎就要换个姿势了#include<cstdio>#include<cstdlib>#include<原创 2016-01-23 09:31:07 · 785 阅读 · 0 评论 -
BZOJ 3343: 教主的魔法|分块
分块暴力对每一个块排序,询问如果跨过了整个块,那么就查询整个块,对排好序的块二分答案,两边在块外的就暴力排序,二分答案 区间修改如果跨过了整个块,就在块上标记,否则暴力修改,重新给块排序#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<queue>#include<vector>#incl原创 2016-01-23 08:03:47 · 413 阅读 · 0 评论 -
BZOJ 2821: 作诗(Poetize)|分块
分块:维护块到块的答案 维护每一个颜色的前缀和 询问的时候把区间中的整块一起算入答案,然后两端分开排序计算答案 如果没有跨过整块那么分开处理 复杂度m*sqrt(n)*log(sqrt(n))#include<set>#include<map>#include<ctime>#include<queue>#include<cmath>#include<cstdio>#include原创 2016-01-22 18:35:50 · 658 阅读 · 0 评论 -
4537: [Hnoi2016]最小公倍数|分块
暴力的做法就是直接找到所有a,ba,b都小于等于某个询问的边然后并查集合并,维护每个集合的a,ba,b得最大值看是否等于询问的a,ba,b 然后就可以考虑分块,把边按照aa排序,每隔n−√\sqrt{n}分为一块 块前的按照bb值排序按顺序插入,块内的暴力判断,并查集合并,每次都把块内合并的记录下来,处理完某个询问时就撤回并查集的操作 块的大小为n−√\sqrt n可能会TT 改成n∗log原创 2016-04-24 14:36:54 · 1456 阅读 · 0 评论