分块
文章平均质量分 51
_beginend
这个作者很懒,什么都没留下…
展开
-
Codeforces 436F Banners 分块维护凸包
题意有两个长度为nnn的数组a,ba,ba,b,对于0≤c≤max(bi)+10\le c\le max(b_i)+10≤c≤max(bi)+1,求整数ppp最大化∑bi≥cw∗c+∑bi<c,ai≥pp\sum_{b_i\ge c}w*c+\sum_{b_i<c,a_i\ge p}pbi≥c∑w∗c+bi<c,ai≥p∑pn,max(b)≤105...原创 2019-07-30 17:06:41 · 217 阅读 · 0 评论 -
Codeforces 896E Welcome home, Chtholly 分块+并查集
题意给出一个长度为n序列A,要求支持m个操作: 1 l r x对于区间[l,r]中所有大于x的位置,将其减去x 2 l r x查询区间[l,r]中有多少个位置的值恰好为x n,m,A[i],x分析首先需要大力分块一波。 对于每一个块,我们将权值相同的位置用并查集搞在一起,并维护一个tagtag表示整块的值要减去多少,mxmx表示块内最大值。 对于操作1: 首先两边的块可以暴原创 2018-01-19 09:08:01 · 591 阅读 · 0 评论 -
bzoj 4867: [Ynoi2017]舌尖上的由乃 分块
题意给一个序列,要求资瓷区间加和求区间第k小。 n,m分析用数据结构显然不好做,考虑分块。 首先对于每一块都维护一个有序的数组,数组第一维表示权值,第二维表示编号。 对于修改操作,整块的我们可以打标记。对于多余的块,我们可以将其分成要修改和不修改两部分,修改完后再归并排序回去就可以仍然保持其有序了。 对于询问操作,可以先二分答案,然后在每一块上二分。注意多余的块不能每次暴力原创 2018-01-17 15:18:32 · 918 阅读 · 0 评论 -
bzoj 4381: [POI2015]Odwiedziny 分块+树链剖分
题意给定一棵n个点的树,树上每条边的长度都为1,第i个点的权值为a[i]。 Byteasar想要走遍这整棵树,他会按照某个1到n的全排列b走n-1次,第i次他会从b[i]点走到b[i+1]点,并且这一次的步伐大小为c[i]。 对于一次行走,假设起点为x,终点为y,步伐为k,那么Byteasar会从x开始,每步往前走k步,如果最后不足k步就能到达y,那么他会一步走到y。 请帮助Byteasar统原创 2017-12-10 00:10:58 · 383 阅读 · 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], …, a原创 2017-10-30 21:36:43 · 368 阅读 · 0 评论 -
bzoj 2741: 【FOTILE模拟赛】L 分块+可持久化trie
题意给出一个序列A,每次询问一段区间[l,r]内最大的连续异或和。强制在线。 n<=12000,m<=6000,A[i]<=maxint分析可以先预处理出前缀异或和,这样就变成了在区间内选两个数使其异或和尽量大。这个问题显然要用到可持久化trie。 我没有往分块上面想,但只要想到分块这题就很水了。 可以预处理出mx[i,j]表示第i块的开头到j这一段的答案,那么每次询问的时候找到第一个作为块开原创 2017-07-27 10:17:52 · 363 阅读 · 0 评论 -
bzoj 3834: [Poi2014]Solar Panels 分块
题意给出a,b,c,d,求最大的n满足存在a<=x<=b,c<=y<=d且gcd(x,y)=n a,b,c,d<=1e9,T<=1000分析考虑枚举答案n,那么问题就转变成了是否满足⌊bn⌋>⌊a−1n⌋且⌊dn⌋>⌊c−1d⌋\lfloor\frac{b}{n}\rfloor>\lfloor\frac{a-1}{n}\rfloor且\lfloor\frac{d}{n}\rfloor>\lfloo原创 2017-06-08 16:43:42 · 303 阅读 · 0 评论 -
bzoj 3576: [Hnoi2014]江南乐 分块+sg函数
题意首先给定一个数F,然后游戏系统会产生T组游戏。每一组游戏包含N堆石子,小A和他的对手轮流操作。每次操作时,操作者先选定一个不小于2的正整数M (M是操作者自行选定的,而且每次操作时可不一样),然后将任意一堆数量不小于F的石子分成M堆,并且满足这M堆石子中石子数最多的一堆至多比石子数最少的一堆多1(即分的尽量平均,事实上按照这样的分石子万法,选定M和一堆石子后,它分出来的状态是固定的)。当一个玩家原创 2017-04-27 10:17:22 · 408 阅读 · 0 评论 -
Codeforces 840E In a Trap 分块+数位dp
题意给一棵树,每个节点有点权a[i],有q次询问,每次询问给出u和v,表示询问u到v路径上每个点x的a[x] xor dis(x,v)的最大值。其中保证u必定是v的祖先。 a[i]<=n<=50000,q<=150000分析做法比较巧妙的一道题。 我们可以维护对于每一个点向上256个点的信息,这样查询的时候我们就可以每次跳256位,然后前面8个二进制位对我们就...原创 2018-03-07 20:50:10 · 372 阅读 · 0 评论 -
bzoj 3509: [CodeChef] COUNTARI 分块fft
题意给定一个长度为N的数组A[],求有多少对i, j, k(1<=i < j < k<=N)满足A[k]-A[j]=A[j]-A[i]。 N<=100000,A[i]<=30000分析把式子画一下就变成了A[j]*2=A[k]+A[i],一个很显然的想法就是枚举j然后fft,复杂度是O(NVlogV),显然不能接受。 考虑分块,设块的大小为B,我...原创 2018-02-28 16:08:52 · 300 阅读 · 0 评论 -
LibreOJ #3145.「APIO 2019」桥梁 分块
题意有一个nnn个点mmm条边的无向图,边有边权。有qqq个操作,每个操作会修改一条边的边权,或是询问从点xxx开始,只走权值不小于yyy的边,可以到达多少个点。n≤5∗104,m,q≤105n\le5*10^4,m,q\le10^5n≤5∗104,m,q≤105分析先对操作分块。处理到某一块的时候,先把之前的块的修改都做掉。然后把这一块中没有被修改的边按边权排序。对这一块的询问按权值从大...原创 2019-07-16 21:29:43 · 234 阅读 · 0 评论 -
Codechef MONSTER 整体二分+分块
题意有n个敌人,编号为0到n-1,每个敌人都有一个血量h。现在有q次操作,每次给出两个数x和y,表示将所有编号为x的子集(二进制下)的敌人血量都减去y。要求每次操作后输出还剩下多少个敌人的血量大于0。 n≤217,m≤218,h,y≤109n≤217,m≤218,h,y≤109n\le2^{17},m\le2^{18},h,y\le10^9分析已经颓废到开始写题了。 首先可以整...原创 2018-08-31 18:36:54 · 352 阅读 · 0 评论 -
hdu 6271 Master of Connected Component 树分块+并查集
题意给定两棵有n个节点的树,每个节点上有一对数(x,y),表示图G中的一条边。对于每一个x,求出两棵树中x到根路径上所有边在图G中构成的子图的连通块个数。 n≤10000n≤10000n\le10000分析考虑在第一棵树中提取关键点,使得每个点到他最近的关键祖先的距离不超过n−−√n\sqrt n,显然这样的点数不超过O(n−−√)O(n)O(\sqrt n)。 考虑把每个点的...原创 2018-07-14 13:35:59 · 375 阅读 · 0 评论 -
Codeforces 966E May Holidays 分块+虚树
题意有一棵n个节点的树,设sisis_i表示节点iii的子树(不包括iii)大小,每个节点iii有一个不超过sisis_i的非负整数作为titit_i作为其忍耐值。一开始每个点都没有放假,现在有m个操作,每次会修改某个人的状态,从没有放假变成放假,或从放假变成没有放假,要求对于每次操作后求出有多少个节点满足其没有放假且其子树中的放假人数严格大于其忍耐值。 n,m≤105n,m≤105n,m\...原创 2018-05-16 08:15:43 · 602 阅读 · 0 评论 -
bzoj 2906: 颜色 分块
题意给定一个长度为N的颜色序列C,对于该序列中的任意一个元素Ci,都有1<=Ci<=M。对于一种颜色ColorK来说,区间[L,R]内的权值定义为这种颜色在该区间中出现的次数的平方,即区间[L,R]内中满足Ci=ColorK的元素个数的平方。接下来给出Q个询问,询问区间[L,R]内颜色[a,b]的权值总和。 1<=N,Q<=50000,M<=20000,强制在线...原创 2018-05-14 16:06:28 · 782 阅读 · 0 评论 -
bzoj 5016: [Snoi2017]一个简单的询问 莫队算法+分块
题意给你一个长度为N的序列ai,1≤i≤N和q组询问,每组询问读入l1,r1,l2,r2,需输出 get(l,r,x)表示计算区间[l,r]中,数字x出现了多少次。 N,Q≤50000分析我们要求的实际上就是区间[l1,r1]中的每个数在区间[l2,r2]中出现次数的和。 考虑按位置分块,预处理f[i,j]表示第i块中的每个数在[1,j]中出现次数的和。 询问的时候,整块的...原创 2018-03-26 15:56:18 · 285 阅读 · 0 评论 -
Codeforces 587F Duff is Mad AC自动机+分块
题意给出n个字符串S[1..n]S[1..n]S[1..n],有q个询问,每次询问(l,r,k)表示求编号在[l,r][l,r][l,r]之间的字符串在S[k]S[k]S[k]中的出现次数的和。 n,q<=105,∑S[i]<=105n,q<=105,∑S[i]<=105n,qS[1..x]S[1..x]S[1..x]在fail树上对应的节点处+1,然后枚举S[k]S...原创 2018-03-12 21:45:36 · 381 阅读 · 0 评论 -
Codeforces 862F Mahmoud and Ehab and the final stage 线段树+单调栈+分块
题意有n个字符串s[1..n]和q次操作,每次操作是 1 l r表示询问区间[l,r]的所有子区间[a,b]中,lcp(s[a],s[a+1],…,s[b])*(b-a+1)的最大值。 2 x str表示把第x个字符串改成str n,q<=100000,读入的字符串总长不超过100000分析调了快一早上。。。 设lcp[i]=lcp(s[i-1],s[i]),那么lc...原创 2018-03-01 10:27:08 · 266 阅读 · 0 评论 -
bzoj 4765: 普通计算姬 分块
题意给定一棵n个节点的带权树,节点编号为1到n,以root为根,设sum[p]表示以点p为根的这棵子树中所有节点的权 值和。计算姬支持下列两种操作: 1 给定两个整数u,v,修改点u的权值为v。 2 给定两个整数l,r,计算sum[l]+sum[l+1]+….+sum[r-1]+sum[r] N<=10^5,M<=10^5分析既然不能用数据结构来维护,那就只能上暴力分块了。 一开始的想法是原创 2017-04-27 08:32:37 · 721 阅读 · 0 评论 -
bzoj 4129: Haruna’s Breakfast 树上带修改莫队+分块
题意有一棵树,每个节点有点权,要求资瓷单点修改和查询一条链上的mex。 n,m<=50000分析一开始想到了树上带修改莫队+分块,但是觉得应该还有更简单的办法,结果发现就是这样。。。 权当是复习树上莫队和带修改莫队吧。 树上莫队就是把这棵树的括号序(注意不是欧拉序)求出来然后就变成序列莫队了。 带修改的话就是加多一维表示修改到哪里。 其他的就是裸的求mex了。 没想到打的这么顺手。。。一原创 2017-05-26 20:52:18 · 395 阅读 · 0 评论 -
bzoj 4070: [Apio2015]雅加达的摩天楼 最短路+分块
题意印尼首都雅加达市有 N 座摩天楼,它们排列成一条直线,我们从左到右依次将它们编号为 0 到 N−1。除了这 N 座摩天楼外,雅加达市没有其他摩天楼。 有 M 只叫做 “doge” 的神秘生物在雅加达市居住,它们的编号依次是 0 到 M−1。编号为 i 的 doge 最初居住于编号为 Bi 的摩天楼。每只 doge 都有一种神秘的力量,使它们能够在摩天楼之间跳跃,编号为 i 的 doge 的跳跃原创 2017-05-03 09:02:00 · 709 阅读 · 0 评论 -
bzoj 3787: Gty的文艺妹子序列 分块+树状数组
题意给出n个数,要求资瓷单点修改和区间逆序对,强制在线。 n,m<=50000分析这题好劲啊!!!看到题就想起了bzoj 3744,只不过那一题没有单点修改。 bzoj 3744的做法是预处理ans[i,j]表示第i块到点j的逆序对数,sum[i,j]表示不大于i的数在前j块里面出现的次数。 但这题很明显不能这么干,因为维护ans和sum的复杂度太大。 那么我们考虑转换一下,设ans[i,j原创 2016-11-07 06:51:59 · 498 阅读 · 0 评论 -
bzoj 3720: Gty的妹子树 树分块
题意给出一棵n个节点的树,节点1为根节点,每个节点有一个权值,要求资瓷三个操作: 0 x y表示询问以x为根的子树内有多少个节点的权值大于y 1 x y表示将节点x的权值修改为y 2 x y表示插入一个新节点,其父节点为x,权值为y n,m<=30000分析看到这个数据范围如果是序列操作的话就毫不犹豫上分块了,但这是一棵树,所以一开始的想法就是用树剖或者主席树什么的搞一搞,但是插入操作太恶心原创 2016-11-06 10:20:28 · 422 阅读 · 0 评论 -
bzoj 3744: Gty的妹子序列 分块+树状数组
题意给出n个数,要求资瓷求区间逆序对,并要求强制在线。 n,m<=50000分析先把所有数离散化,这样就可以方便用树状数组啦。 然后分一波块。 然后我们在O(nn√log)O(n\sqrt nlog)的时间内预处理出两个数组: ans[i,j]表示第i块到第j个数之间有多少个逆序对。 sum[i,j]表示前j块里面有多少个数不大于i。 那么设现在要询问的区间为[l,r] 假如l和r在同原创 2016-11-05 21:22:52 · 374 阅读 · 0 评论 -
bzoj 3343: 教主的魔法 分块+二分
Description教主最近学会了一种神奇的魔法,能够使人长高。于是他准备演示给XMYZ信息组每个英雄看。于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1、2、……、N。每个人的身高一开始都是不超过1000的正整数。教主的魔法每次可以把闭区间[L, R](1≤L≤R≤N)内的英雄的身高全部加上一个整数W。(虽然L=R时并不符合区间的书写规范,但我们可以认为是单原创 2016-09-24 13:14:33 · 344 阅读 · 0 评论 -
bzoj 2120: 数颜色 带修改莫队算法
题意:有n个位置(n<=10000),初始每个位置有一种颜色,要求资磁两个操作: R x y 把位置x的颜色变为y Q x y 求x到y这个区间内出现了多少种不同的颜色分析:让我们来介绍一下带修改莫队,其实就是三维莫队。 每个询问本来只有二元组(l,r)表示,现在我用一个三元组(l,r,x)表示,意思是对[l,r]进行询问,x表示在此次询问操作之前经过了x次修改操作。 然后和普通莫队一样,第原创 2016-08-18 15:49:38 · 827 阅读 · 0 评论 -
bzoj 3758: 数数 分块打表
Description神犇最近闲来无事,于是就思考哲学,研究数字之美。在神犇看来,如果一个数的各位能够被分成两个集合,而且这两个集合里的数的和相等,那么这个数就是优美的(具体原因就只有神犇才知道了)。现在神犇在思考另一个问题,在区间[a,b]中有多少个数是优美的?这个问题对于神犇来说很简单,相信对于你来说也不难。 Input输入只有一行,包含两个整数a和b。 Output输出只有一行,包含一个原创 2016-10-17 20:56:29 · 1122 阅读 · 0 评论 -
bzoj 3781: 小B的询问 莫队算法+分块
题意有一个序列,包含N个1~K之间的整数。一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重复次数。 n,m,k<=50000分析莫队算法好劲啊!!! 按所在块为第一关键字,右端点为第二关键字对询问排序,然后就可以直接上莫队啦。代码#include<iostream>#include<cstdio>原创 2016-11-09 10:55:55 · 389 阅读 · 0 评论 -
bzoj 4815: [Cqoi2017]小Q的表格 分块+莫比乌斯反演
题意小Q是个程序员。 作为一个年轻的程序员,小Q总是被老C欺负,老C经常把一些麻烦的任务交给小Q来处理。每当小Q不知道如何解决时,就只好向你求助。为了完成任务,小Q需要列一个表格,表格有无穷多行,无穷多列,行和列都从1开始标号。为了完成任务,表格里面每个格子都填了一个整数,为了方便描述,小Q把第a行第b列的整数记为f(a,b),为了完成任务,这个表格要满足一些条件:(1)对任意的正整数a,b,都要原创 2017-04-14 17:00:00 · 1386 阅读 · 0 评论 -
bzoj 4537: [Hnoi2016]最小公倍数 并查集按秩合并+分块
题意给出n个点m条边的无向图和q个询问,每条边有两个权值a和b,每个询问给出x y a b,问有没有一条x到y的路径(不一定是简单路径)满足max(e_a)==a且max(e_b==b) n,q<=50000,m<=100000分析对于一个询问,我们可以把所有e_a<=a且e_b<=b的边都加进来,并看x和y所在的联通块内最大的a和最大的b是否与给出的a和b相等即可。 但如果每次暴力维护的话显然原创 2017-03-14 16:42:06 · 550 阅读 · 0 评论 -
bzoj 2956: 模积和 分块+数学
题意求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j<=m,i≠j。 n,m<=109n,m<=10^9分析一开始没看到i≠j的条件,然后就直接把原式拆成(∑(nmodi))∗(∑(mmodj))(\sum (n mod i))*(\sum (m mod j)),分别计算后直接加起来即可。 但是有了i≠j这个条件,我们可以选择容斥,就是用上述式子减去∑(nmodi)∗原创 2017-03-08 17:16:26 · 457 阅读 · 0 评论 -
bzoj 3236: [Ahoi2013]作业 莫队算法+分块
题意给出一个长度为n的序列,元素范围为[1,n]。给出求个询问,格式为l r a b,表示询问[l,r]中在[a,b]范围内的数有多少个和在[a,b]范围内的数有多少种。 n<=100000 m<=1000000分析搞不懂那些莫队+树状数组是怎么卡过的,复杂度明明已经炸掉不知道多少了……其实只要对权值分块即可做到O(1)O(1)修改,O(n√)O(\sqrt n)询问,那么总时间复杂度就是O(nn原创 2016-11-24 21:03:32 · 717 阅读 · 0 评论 -
bzoj 4241: 历史研究 分块
题意给出n个数,每次询问一个区间最大的s(i)*i,s(i)为i这个数出现的次数。 n,m<=100000分析毫无压力1A,不过居然跑了50s+。先离散化,预处理ans[i,j]表示第i块到第j块的答案,sum[i,j]表示i在前j块出现的次数,询问的时候两端的块扫一遍,维护一个桶即可。代码#include<iostream>#include<cstdio>#include<cstdlib>原创 2016-11-20 21:09:00 · 461 阅读 · 0 评论 -
bzoj 3809: Gty的二逼妹子序列 分块+莫队算法
题意给出n个数m次询问,每次询问[a,b]之间的颜色在区间[l,r]之间出现了多少种。 n<=100000,m<=1000000分析看到28M的内存整个人都不好了啊。 树套树什么的就别想了~~ 这题很容易想到莫队+树状数组,那样的话复杂度是O(nn√logn)O(n\sqrt nlogn) 还有一种离奇的分块做法,就是对权值分块,那么修改就是O(1)O(1),查询就是O(nn√)O(n\sq原创 2016-11-17 15:06:25 · 327 阅读 · 0 评论 -
bzoj 2821: 作诗(Poetize) 分块
题意给出n个数,每次询问一个区间内出现正偶数次的数的种类数。强制在线。 n,m<=50000分析如果是离线的话很显然直接维护一个桶然后上莫队就好了。 但如果强制在线的话……分块大法好!!!分块大法好!!!分块大法好!!! 预处理ans[i,j]表示第i块到第j块的答案,sum[i,j]表示i在前j块出现的次数,然后每次询问的时候对两端的块分别扫一遍即可。 记得用完桶之后要把桶清零。代码#in原创 2016-11-17 08:17:50 · 311 阅读 · 0 评论 -
bzoj 2724: [Violet 6]蒲公英 分块
题意给出n个数,要求资瓷区间众数的查询。 n<=40000,m<=50000 强制在线分析这是栋爷所说的经典分块题。先把数字离散化,那么我们就可以开我们最爱的东西——桶。 把n个数字按照n√\sqrt n的大小分成n√\sqrt n块,并预处理一些东西: ans[i,j]表示第i块到第j块的众数是多少。 sum[i,j]表示数字i在第1块到第j块出现了多少次。 这两个数组都可以在O(nn原创 2016-11-01 20:05:56 · 295 阅读 · 0 评论