
分块
文章平均质量分 55
WerKeyTom_FTD
这个作者很懒,什么都没留下…
展开
-
[loj2461]完美的队列
题目大意有n个队列,每个队列有一个上限aia_i。 当队列上限满时,如果还要push,其会先执行一次pop。 现在有mm个操作。 每次操作都会给一个区间的队列push同一个x。 要求回答每次操作后所有队列中数的种类数。做法当一个数xx进入第ii个队列,这个队列再push aia_i次会pop掉这个xx。 这个非常显然。 现在对于每个操作,我们需要知道最早在第几次操作后,这次操作加入的xx原创 2018-04-03 10:51:27 · 1635 阅读 · 0 评论 -
[bzoj3509][codechef]COUNTARI
题目大意求有多少对i<j<ki<j<k 满足a[j]-a[i]=a[k]-a[j]分块FFT口胡里写过了。 枚举j,我们可以得到两边的生成函数。 只要卷积起来看2*a[j]项的系数就可以统计了。 这样做显然不行。 考虑分块。 对于i或k在块内的情况,用枚举来暴力统计。 而对于i与k均不在块内的情况,用FFT。#include<cstdio>#include<algorithm>#i原创 2017-03-28 22:32:24 · 653 阅读 · 0 评论 -
[luoguP3674]小清新人渣的本愿
题目大意询问区间是否存在两个数和为x/差为x/积为x 这两个数可以使同一个数bitset不会bitset的蒟蒻哭了 维护bitset加和减就随便做了。 积就枚举较小数 上个莫队算法来维护我们需要维护的#include<cstdio>#include<algorithm>#include<bitset>#define fo(i,a,b) for(i=a;i<=b;i++)using n原创 2017-03-20 16:52:20 · 954 阅读 · 0 评论 -
[hackerrank]Range Modular Queries
题目大意区间询问模x等于y的值的个数 值域是[0,40000] 允许离线平衡结合对于x<=200的询问,因为x很小所以y也很小,这时候可以考虑使用分块。 将序列分块,然后处理sum[i,j,k]表示前i块中模j等于k的值有多少个。 询问时暴力扫剩余部分。 对于x>200的询问,因为x较大所以符合条件的数很小,这时候可以考虑使用莫队。 维护一个桶,每次询问只要看一下对应符合的数字有多少个即原创 2017-03-20 15:24:21 · 590 阅读 · 0 评论 -
Sequence
题目大意若干个区间询问 每次询问∑ri=l∑rj=lw((ai,aj))\sum_{i=l}^r\sum_{j=l}^rw((ai,aj)) w(x)表示x的不同质因子数。上以根号n为阈值,用两种算法。 小于等于根号n的质数枚举+前缀和 大于根号n的就上莫队 当然直接莫队也能8nn√8n\sqrt n#include<cstdio>#include<algorithm>#define原创 2017-03-18 20:20:01 · 502 阅读 · 0 评论 -
J
题目描述分块2*3的矩形可以压成64以内的二进制数。 我们分块,对于每块,维护块内每个前缀异或的桶,以及整个块异或值,因为有区间修改还要有修改tag,然后便容易询问与修改。#include<cstdio>#include<algorithm>#include<cmath>#define fo(i,a,b) for(i=a;i<=b;i++)#define fd(i,a,b) for(i=a原创 2017-01-20 16:20:36 · 469 阅读 · 0 评论 -
[51nod 1471]小S的兴趣
题目描述小S喜欢有趣的事。但是,每个人的兴趣都是独特的。小S热衷于自问自答。有一天,小S想出了一个问题。 有一个包含n个正整数的数组a和针对这个数组的几个问题。这些问题有两种类型: 1. 在数组下标l到r的部分上,将一个单元格循环移动到右端。即以下面方式重新分配数组上的元素。 a[l], a[l+1], …, a[r-1], a[r] → a[r], a[l], a[l+1], …,原创 2016-12-21 20:42:00 · 599 阅读 · 0 评论 -
[51nod 1203]JZPLCM
题目大意求区间lcm。带模运算。做法不知道有没有更简单的做法。 最小公倍数是什么意思?一堆数的最小公倍数,就是对于每一个质数p,这些数每个数中p的次数的最大值k,然后最小公倍数就会包含一个p^k。 p很大时k会很小,p很小时k会很大,这是两个互相制约的因素,因此考虑使用两种算法然后进行平衡结合。 设置阈值B=230(差不多就是√n) 对于所有<=B的质数p都枚举一遍,然后计算出每个数包含多少原创 2016-12-12 22:24:27 · 891 阅读 · 0 评论 -
[51nod 1223]分数等式的数量
题目大意有这样一个分数等式:1/X + 1/Y = 1/N,(X,Y,N > 0)。给出L,求有多少满足X < Y <= L的等式。 例如:L = 12,满足条件的等式有3个,分别是:1/3 + 1/6 = 1/2, 1/4 + 1/12 = 1/3, 1/6 + 1/12 = 1/4。数论题大师张俊不教我我不会。。 其实就是求多少对(a,b)满足a+b|ab 设d=(a,b),a1*d=a,原创 2016-12-12 22:10:45 · 815 阅读 · 0 评论 -
[hackerrank]Counting on a tree
题目大意给你一棵树,每个点有一个颜色 若干询问,每次询问两条树路径上,存在多少点对(i,j)满足以下条件: 1、i不等于j 2、i和j颜色相同 3、i在第一条树路径上,j在第二条树路径上第一种算法我们先将颜色离散化,然后统计每种颜色有多少个点。 先不考虑第一个限制,假设对于一种颜色c,我处理出了d数组d[x]表示x到根路径上有多少个颜色为c的,那么一个询问x->y和u->v答案为(d[x]原创 2016-11-14 17:33:15 · 678 阅读 · 0 评论 -
[bzoj4035]数组游戏
题目描述有一个长度为N的数组,甲乙两人在上面进行这样一个游戏:首先,数组上有一些格子是白的,有一些是黑的。然 后两人轮流进行操作。每次操作选择一个白色的格子,假设它的下标为x。接着,选择一个大小在1~n/x之间的整数 k,然后将下标为x、2x、…、kx的格子都进行颜色翻转。不能操作的人输。现在甲(先手)有一些询问。每次他 会给你一个数组的初始状态,你要求出对于这种初始状态他是否有必胜策略。好题原创 2017-04-25 22:12:49 · 1192 阅读 · 0 评论 -
[bzoj4815][CQOI2017]小Q的表格
题目描述小Q是个程序员。 作为一个年轻的程序员,小Q总是被老C欺负,老C经常把一些麻烦的任务交给小Q来处理。每当小Q不知道如何解决 时,就只好向你求助。为了完成任务,小Q需要列一个表格,表格有无穷多行,无穷多列,行和列都从1开始标号。 为了完成任务,表格里面每个格子都填了一个整数,为了方便描述,小Q把第a行第b列的整数记为f(a,b),为了完成 任务,这个表格要满足一些条件:(1)对任意的正原创 2017-06-16 17:12:32 · 690 阅读 · 0 评论 -
[2017集训队作业自选题#119]众数MAX
题目大意两个长度为n的序列a和b,将它们分别任意排列,然后令c[i]=a[i]+b[i]c[i]=a[i]+b[i],使c[i]的众数出现次数尽量多。 值域与n同阶。做法不妨令A[i]表示a中i的出现次数,B同理。 令ans[i]表示i作为众数的最多出现次数。 显然的暴力 ans[i]=∑ij=0min(A[j],B[i−j])ans[i]=\sum_{j=0}^imin(A[j],B[i-原创 2017-12-21 21:07:42 · 686 阅读 · 0 评论 -
[2017集训队作业自选题#154]简单数据结构题
题目大意一颗点权树,初始点权均为0。 每次操作将所有距离x为1的点点权+1,然后希望你求出距离x为1的点点权异或和。一个转化把修改分成儿子修改和单点修改,把询问分成儿子询问和单点询问。 每次相当于x的儿子修改+x的父亲单点修改,询问类似。根号算法发现一个点儿子的点权种类数最多根号种。 不妨用链表(动态桶)维护每种点权出现次数。正解注意到x^(x+1)=2*lowbit(~x)-1。 我们不妨原创 2017-11-14 12:00:56 · 1180 阅读 · 0 评论 -
[2017集训队作业自选题#115]Replace All
题解推荐wxh 可爱的修修 本题相较于CF794G,n加0了。 我们需要快速计算 ∑ni=1∑nj=12(i,j)\sum_{i=1}^n\sum_{j=1}^n2^{(i,j)} ∑nd=12d∑n/di=1∑n/dj=1[(i,j)=1]\sum_{d=1}^n2^d\sum_{i=1}^{n/d}\sum_{j=1}^{n/d}[(i,j)=1] ∑nd=12d∗(2∗∑n/di=原创 2017-11-17 10:55:59 · 1214 阅读 · 0 评论 -
[codechef]WEASELTX
题目大意有一颗点权树。 每过一天,就会自上而下更新,更新的含义是点权变成子树内点权异或和。 若干个询问询问第d天根节点的点权。分析很显然深度相同的可以缩在一起。 我们设a[i][j]表示第i天深度为j的节点点权是否会给根节点带来影响。 容易发现a[i][j]=XORj−1k=0a[i−1][k]a[i][j]=XOR_{k=0}^{j-1} a[i-1][k] 也就是a[i][j]=a[i原创 2017-09-16 10:28:03 · 645 阅读 · 0 评论 -
n根号n解决在线无修区间逆序对问题
做法带log的分块相信大家都会,今天我们来讲讲不带log。 首先先离散化,这样值域就变成n了。 我们以根号为阈值分块,然后我们记A->B的含义是将A和B两个序列拼接在一起有多少逆序对两个元素一个来自A另一个来自B。 首先考虑如何求A->B,可以发现A和B的内部顺序是没有关系的,因此如果我们把A和B排好序了,运用归并即可线性求得A->B。 现在我们先把每个块排序,然后预处理一个位置到块头的逆序原创 2017-09-14 17:04:43 · 3275 阅读 · 0 评论 -
区间第k小
题目大意给你一个序列元素均在[0,n)内,并给定常数w。 每次在线询问区间第k小,要求忽略区间出现次数>w的数。根号算法我们不妨考虑如何离线。 可以使用莫队+线段树做到 n根号n log n,非常菜鸡。 可以发现我们只有n次询问却有n根号n次插入删除,如果我们使用线段树是很亏的。 考虑经典套路即平衡复杂度: kth是有办法O(1)-O(√n)的,具体做法是维护值域分块,以及一个桶。 值域原创 2017-08-13 22:43:11 · 969 阅读 · 0 评论 -
[CF538F]A Heap of Heaps
题目大意懒得写做法从0开始标号。 注意i是父亲是(i-1)/k 因此可以分块 对一段产生的影响可以在数组上打tag#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)#define fd(i,a,b) for(i=a;i>=b;i--)using namespace std;const int m原创 2017-06-15 14:53:56 · 1366 阅读 · 0 评论 -
回转寿司
题目描述分块你考虑有一堆人,价格为x的进去了出来会变成啥样。 那么肯定是找到这堆人所持价格的最大值y,如果x>y,出来的还是y,否则x会变成某个人手里的,然后出来的是y。 我们考虑分块,每个块维护一个数堆。 如果x要经过一个块,可以丢进数堆,再取出一个最大值。然后还要给这个块打上一个标记。 但是对于零散的不是很好做,即重构块,我们如何快速得到每个位置经过一系列标记后的值? 注意这个问题具有原创 2017-06-25 20:44:18 · 681 阅读 · 0 评论 -
摧毁图状树
题目大意Q次询问,每次给一个k。 将树用尽量少的长度不超过k的祖先后代链覆盖,使得每个点至少覆盖一次。贪心对偶成选择尽量多的点,使得任意长度不超过k的祖先后代链上至多一个点被选择。 这样转化则贪心很显然。尽量选深度大的点。 如果有t个叶子,选取的点至多为t+(n-t)/k。 因为叶子一定会被选择,同样删去所有被选择的点后,每个联通块大小不会小于k(否则一定在原来的树中存在长度不超过k的祖先后原创 2017-06-28 19:24:21 · 750 阅读 · 0 评论 -
[CodeM初赛A轮]E
题解大小点分治。 出现次数大于阈值的,处理前缀和,然后暴力枚举一个询问判断。 出现次数小于阈值的,跑莫队,维护每个数出现次数,以及每种出现次数的数的个数,然后询问可以暴力枚举出现次数。#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;const int max原创 2017-06-18 22:20:41 · 730 阅读 · 2 评论 -
[bzoj3236][AHOI2013]作业
题目大意多次询问[l,r]内权值在[a,b]的数量及种类数。分块数量随便做,我们思考种类数怎么做。 具体见gty的二逼妹子序列题解#include<cstdio>#include<algorithm>#include<cmath>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;const int maxn=100000+10,原创 2016-11-10 21:55:50 · 628 阅读 · 0 评论 -
太阳神
题目描述太阳神拉很喜欢最小公倍数,有一天他想到了一个关于最小公倍数的题目。 求满足如下条件的数对(a,b)对数:a,b均为正整数且a,b<=n而lcm(a,b)>n。其中的lcm当然表示最小公倍数。答案对1,000,000,007取模推式子我们先做个补集转化。 然后就是统计这样的三元组(a,b,d)个数了 1、a*b*d<=n 2、(a,b)=1 a和b定了,d的取值就有nab\frac{原创 2016-11-09 21:14:45 · 13258 阅读 · 0 评论 -
Jason做奥数
前言富榄好劲啊!题目大意TL做法为了方便,下面的L都用M代替。 显然可以分开每个质数来讨论。 枚举一个pcp^c,所带了的贡献是(pc)(m−⌊mpc+1⌋)n−(m−⌊mpc⌋)n(p^c)^{(m-\lfloor\frac{m}{p^{c+1}}\rfloor)^n-(m-\lfloor\frac{m}{p^c}\rfloor)^n} 为什么?很简单,LCM包含pcp^c表示p的指数至少有原创 2016-07-14 10:32:26 · 520 阅读 · 0 评论 -
[bzoj4241]历史研究
题目大意求区间加权众数。分块大法好显然我们可以用类似苹果树这道题的序列上问题的分块做法解决。 即初始化第i块到第j块的答案,以及每个元素在前i块出现的次数。 然后就很容易做了。#include<cstdio>#include<algorithm>#include<cmath>#define fo(i,a,b) for(i=a;i<=b;i++)#define fd(i,a,b) for(原创 2016-03-01 18:47:40 · 826 阅读 · 0 评论 -
[bzoj3289]Mato的文件管理
题目大意给定一个序列,每次询问一个区间,你可以交换相邻两个元素,这个区间你最少需要多少次交换才能使其有序。分块大法好我们观察,每次交换如果交换a[i]和a[i+1],那么显然a[i]>a[i+1],交换后逆序对个数减一。当序列逆序对个数为0时序列就有序。那么显然题意就是询问区间逆序对个数。我们可以用莫队算法来做。因为它符合类似+1-1的性质。#include<cstdio>#include<alg原创 2016-03-02 18:40:17 · 842 阅读 · 0 评论 -
[bzoj2821]作诗
题目大意询问区间出现次数为正偶数的数的个数分块大法好经典分块方法。 预处理ans[i,j]表示第i块到第j块的答案,sum[i,j]表示前j块中元素i出现的次数。 然后搞一波就行了。 bzoj上空限卡得比较蛋疼。#include<cstdio>#include<cmath>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)usi原创 2016-03-07 14:03:32 · 755 阅读 · 0 评论 -
[bzoj2724]蒲公英
题目大意在线兹瓷区间求众数经典分块预处理ans[i,j]和sum[i,j]不用说了,不知道的请戳根号算法题库#include<cstdio>#include<algorithm>#include<cmath>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;typedef long long ll;const int maxn=原创 2016-03-13 22:00:57 · 1203 阅读 · 0 评论 -
[bzoj3744]Gty的妹子序列
题目大意在线兹瓷区间求逆序对个数。双倍经验最简单的做法是预处理ans和sum这个不用说了具体可以看根号算法题库里的经典分块思路。 当然这道题有升级版Gty的文艺妹子序列,那道题多一个修改操作。 反正我直接改了一下那题的代码交了。#include<cstdio>#include<algorithm>#include<cmath>#include<ctime>#define fo(i,a,b原创 2016-03-30 19:24:54 · 1021 阅读 · 0 评论 -
[bzoj3787]Gty的文艺妹子序列
题目大意在线兹瓷修改操作与区间求逆序对。 所有元素大小在[1,n]很显然的离线做法我们回忆bzoj3289的做法,可以使用莫队算法,加上线段树进行兹瓷in,out,query。在线做法?我们回忆经典分块做法。 预处理ans[i,j]表示第i块到第j块的答案,sum[i,j]表示前i块元素j的个数,然后只需要再弄个线段树就可以搞了。 现在我们要兹瓷修改,那我们照着原来的思路改一下。 ans[i原创 2016-03-29 18:52:55 · 1499 阅读 · 2 评论 -
[bzoj3567]江南乐
题目描述小A是一个名副其实的狂热的回合制游戏玩家。在获得了许多回合制游戏的世界级奖项之后,小A有一天突然想起了他小时候在江南玩过的一个回合制游戏。 游戏的规则是这样的,首先给定一个数F,然后游戏系统会产生T组游戏。每一组游戏包含N堆石子,小A和他的对手轮流操作。每次操作时,操作者先选定一个不小于2的正整数M (M是操作者自行选定的,而且每次操作时可不一样),然后将任意一堆数量不小于F的石子分成原创 2016-03-17 18:54:17 · 912 阅读 · 0 评论 -
wyx
备注这题为啥叫wang yu xuan题目大意h[i]表示i的质因子的最大指数。现有ca组询问,每组给出n与m,ans=∑ni=1∑mj=1h[gcd(i,j)]ans=\sum_{i=1}^n\sum_{j=1}^mh[gcd(i,j)] ca<=10000,n,m<=10000000繁衍我们很容易可以筛出h数组。 我们设f[i]表示有多少对gcd为i,则莫比乌斯反演一下,我们易得 ans=原创 2016-01-08 20:30:28 · 1506 阅读 · 0 评论 -
于神之怒
题目大意求∑ni=1∑mj=1gcd(i,j)k\sum_{i=1}^n\sum_{j=1}^mgcd(i,j)^k n,m,k<=5000000繁衍设h[i]=ikh[i]=i^k,显然h可以线筛出来。 设n<=m如果不小于就调换。 设f[d]=∑ni=1∑mj=1(gcd(i,j)==d)f[d]=\sum_{i=1}^n\sum_{j=1}^m(gcd(i,j)==d) 那么显然f[d原创 2016-01-08 19:37:53 · 945 阅读 · 0 评论 -
五校联考六T3
题目大意定义S 为十进制只由4 和7 组成的全体正整数的集合。 对于1 ≤ i ≤ N,给定ai。要求完成M 个操作: add l r v 将i ∈ [l, r] 的所有ai 加上v count l r 统计有多少i 满足i ∈ [l, r] 且 ai ∈ S模型转换题目给出条件 ai>=1,v>=1,所有操作结束后所有a不会超过10000。 由于v是正数,这说明任何操作结束后a都不会超过原创 2015-10-06 19:02:30 · 868 阅读 · 0 评论 -
[bzoj3757]苹果树
题目大意有一颗N个节点的树和M个询问,每个点有一种颜色。每次询问u到v路径上把颜色s和颜色t当作同一种颜色后路径上不同颜色的数目。 n<=5*10^4,m<=10^5树上莫队注意到这题符合莫队算法特征。 于是直接树上莫队即可,用num[x]表示颜色x出现的次数,那么对于把颜色s和t当作同一种颜色只需要看num[s]和num[t]是否都大于0,注意考虑s=t的情况。#include<cstdio>原创 2016-02-16 20:17:02 · 1134 阅读 · 0 评论 -
[bzoj2002]弹飞绵羊
题目大意有N个点,每个点有一个系数a[i],你处于位置i可以走到i+a[i],若i+a[i]>n则你走出了地图。现M个操作有两种:1、把a[j]修改为k。2、询问你位于点j时,需要走多少部走出地图。n<=2*10^5,m<=10^5。LCT裸题我们可以转化为如下问题:1、将x的父亲设为y。2、询问x的深度。 那就变成了LCT裸题,为了支持询问操作只需要维护size即可。 这个方法我还没有打,因为原创 2016-01-17 14:46:37 · 782 阅读 · 0 评论 -
[bzoj4635]数论小测验
题目大意有两个问题: 1、求有多少个长度为n的序列,每个数都在[1,m],满足gcd(a1……an)=k 2、求有多少个长度为n的序列,每个数都在[1,m],满足k|lcm(a1……an) 现在给定l和r,求k取[l,r]时回答其中一种问题的答案和。第一题我们设f[i]表示k=i时的答案。 显然f[i]=⌊mi⌋n−∑⌊mi⌋j=2f[i∗j]f[i]=\lfloor\frac{m}{i}\原创 2016-07-10 20:55:26 · 893 阅读 · 0 评论 -
[bzoj3065]带插入区间K小值
题目大意在线维护一个序列,需要兹瓷插入、修改、求区间K小值。树套树开一颗权值线段树。 对于区间[l,r]对应的结点上保存一颗spaly,spaly中的结点权值均在[l,r],按照位置从小到大。 要维护一个结点的位置号。 插入操作,往下走然后插入到spaly中,并打区间加标记来维护位置号。 修改操作,相当于一次删除一次插入。 询问操作,利用线段树特性查找即可。 嘴巴我会,你要我打……还没准原创 2016-05-06 22:08:44 · 1835 阅读 · 0 评论 -
关于树分块算法的一些研究
前言树分块这种算法,本蒟蒻没有查询到太多资料。 而gty系列中,出现过如“gty的妹子树”这样的题目,流传着一种“树分块”做法。 然而,网络流传的树分块算法都可以被菊花图卡掉。 流传的方法:一个结点的父亲所在块未满,就让该结点加入其父亲所在块,否则自成一块。 至于这个方法最早的出处我就不清楚了。 本文将介绍正统的树分块算法(其实也是笔者yy的)。 先把结论放上:其实树分块并没有什么卵用。原创 2016-05-13 21:23:18 · 5632 阅读 · 9 评论