分块
文章平均质量分 79
「已注销」
混子一个
展开
-
HDU 5057-平方分割(分块)
这题如果知道了要分块做还是很简单的,分块的思想主要就是把一个连续的区间分成根号n块。。 这里仔细想想和线段树的思想有些类似,很多区间查询的题可以用分块思想解决,不过根号n比较慢就是了,但是有些在线段树上复杂的操作写起来很方便, 这道题题意就是查询一个区间内第d位为p的数有多少,那么一个块里面存一个【10】【10】也是容易想到的,剩下的就是暴力了。。 PS.代码太挫了,卡过时间,人傻复杂度大。原创 2016-04-13 21:18:56 · 644 阅读 · 0 评论 -
CCNU 校赛J---分桶法
题意如上,标程是线段树,每个节点维护 a方的和,b方的和,ab的和,修改就是矩阵乘法,当然区间修改还要lazy标记。。 这里考虑一个思维含量较低的分块做法。。 平方分割法的复杂度为O(n*n^1/2),是要比线段树复杂度高的,但是由于分块做法一般常数小,所以如果不是时间限制卡的很紧,很多题是可以水过去的。 对于这道题目,最大的问题就是区间修改,我们可以仿照线段树里面的laz原创 2016-05-13 21:48:18 · 440 阅读 · 0 评论 -
HDU 3333 分块求区间不同数和
http://acm.hdu.edu.cn/showproblem.php?pid=3333 题意:求区间不同数的和。 思路:主席树和树状数组的的做法就不介绍了,blog里有介绍过。。这里介绍一下分块的做法(本来是想去莽5919。。。结果没莽过。。。只能改改代码拿3333来练练手了) 这里维护每个块的值(最之前出现的位置)有序,之后就是分块套路,查询整块的时候去二分有原创 2016-10-25 00:04:32 · 845 阅读 · 0 评论 -
HDU 5919 分块做法
题意和链接前面的blog有,就不再提。。 思路:本来实在是莽不过去。。后来想到其实复杂度均摊下来每块取比sqrt(n)大一些更好。。具体大多少。。嗯。。大概x^2/logx=N 。?我也不会解。。。 所以n取了个2*sqrt(n)结果卡过去了。。。重要的还是思想。。分块后每块排序,和3333套路差不多,时间复杂度O(n*sqrt(n)*log(n))复杂度一看就不小。。不过编码很简单暴力。。原创 2016-10-25 01:24:06 · 597 阅读 · 0 评论 -
poj 1741 点分治
题意,一棵树,边有权值,问有多少点对之间的路径 思路,树分治基础,直接点分治,合并的时候分边依次计算。维护处理边的dis数组和某重心已经处理过的dis数组就好了,记得保证有序性方便二分计数。 代码: //#include #include #include #include using namespace std; #define X first #define Y s原创 2017-07-26 20:53:00 · 250 阅读 · 0 评论 -
2017沈阳网络赛G XOR 分块(分类讨论sqrt)
题意:一棵树,点权,Q次询问,A---B路径上每K个点的异或和 链接:点击打开链接 思路:分类讨论,k小于200,类似dp的预处理,在求lca的过程中可以求出来,k大于200,直接暴力跳,最多跳sqrtn步,其中还带个log的倍增。1200ms AC。。 PS :场上手残。。。 代码: #include using namespace std; const int MAXN = 100原创 2017-09-16 20:11:04 · 237 阅读 · 0 评论 -
Educational Codeforces Round 55 E 分治
题意:一个数组,选一个连续区间[L,R] 使得 区间内相同的数 + 区间外a[i]=c的个数最多 思路:似乎可以o(n),这里提供一个O(nogn)的分治方法,这类只选一个区间的问题很容易想到分治法,难在如何合并左右区间,这里我们贪心合并即可,维护一下 左右可并的每种a[i] 的最优答案。可能表述不清,详细见代码。 代码: #include<bits/stdc++.h> #de...原创 2018-12-01 13:29:56 · 170 阅读 · 0 评论