
分块思想
二分抄代码
去了18ec没资格去19ec的反向训练选手
展开
-
gym102861E. Party Company
https://codeforces.com/gym/102861/problem/E听课也更不上,比赛过了一车人的题也不会,没了啊这题很显然我们可以看出,由于最后一定是一个连通块属于同一个组,那么由组长o我们可以倍增到最上面的领导o1,使得最上面恰好逼近r那么最显然的想法就是从这个根节点o1开始,他子树中所有>=l的都会+1,那么子树问题显然可以用dfs序来维护,按dfs序标号,然后分块对每块内部排序,然后左右边界的块暴力找,中间的块一定在子树中,就直接二分后用差分数组作区间加法O(原创 2021-01-26 23:38:26 · 471 阅读 · 0 评论 -
hdu6756 Finding a MEX 2020杭电hdu多校第1场
http://acm.hdu.edu.cn/showproblem.php?pid=6756比赛时用的对询问分块,赛后测数据要跑10s,卡这题卡了巨久,和队友写了两份代码都T,没时间看其他题了。。。以前写过一些题,就是把修改放在一个修改队列里面,大于sqrt(q)个的时候重构整个某数据结构,于是询问是q*sqrt(q)的,重构时n*sqrt(q)的。这题就对每个点开个动态开点线段树或者树状数组,由于mex值最大为du[i],所以只要开du[i]的长度,空间是构的。然后把修改放到修改队列里面,不修改a原创 2020-07-22 17:58:05 · 338 阅读 · 2 评论 -
codeforces 1207F Remainder Problem
传送门:http://codeforces.com/problemset/problem/1207/F5e5也能分块= =,cf评测姬快如闪电,不过当时也没时间写了又是一道卢总当年讲过的big-small思想len=sqrt(5e5)对于x<len的我们存到数组val[len][len]里面,O(根号n)修改,O(1)查询对于x>len的我们直接在原数组上加,然后O(5...原创 2019-08-23 09:57:38 · 514 阅读 · 0 评论 -
牛客多校第9场H Prefix Sum
这题正解是线段树上打等差数列的tag,然后维护。不过我看不太懂= =,队友想起了卢总讲过的big-small分块暴力思想,对于一个x位置加了一个y,a[k][idx]就加了C(idx+k-x-1,k-1),我们开一个队列长度为sz保存一蛤操作,超过sz就把队列中的+操作放进a[0]里面去,然后跑n*k,算出a[k],把队列清0,如果没超过sz的询问,直接a[k][idx]+队列中每一个操作对a[k...原创 2018-08-16 22:19:25 · 516 阅读 · 0 评论 -
HDU6395 Sequence
看到向下取整,就要想到sqrt(n)分块,然后那一部分要加的数字都是相同的,那么在这一段里面矩阵快速幂就行了考场上没写出来= =,这题太晚写了,结果有些细节下标想不清楚,而且一开始我的ans矩阵每一位都是1了,而单位矩阵应该是对角线是1。。。不枉我线代78分#include<cstdio>#include<cstring>#include<cmath&g...原创 2018-08-14 15:11:41 · 154 阅读 · 0 评论 -
BZOJ5016
#include#include#include#include#define maxl 50010using namespace std;int n,m,size,cnt,tot;int a[maxl],pos[maxl],l[maxl],r[maxl],cntl[maxl],cntr[maxl];struct que{ int l,r,f,ind;}q[maxl<<2原创 2018-01-25 20:50:19 · 313 阅读 · 0 评论 -
CodeForces 617E
#include#include#include#include#define maxl 2000010using namespace std;long long n,m,k,size,cnt,res;long long a[maxl],sum[maxl],pos[maxl],l[maxl],r[maxl];long long num[maxl];long long ans[原创 2018-01-25 20:49:24 · 312 阅读 · 0 评论 -
BZOJ2002
#include#include#include#include#define maxl 200010using namespace std;int n,m,cnt,size;int a[maxl],l[maxl],r[maxl],times[maxl],nxtpos[maxl],pos[maxl];void prework(){ for(int i=1;i<=n;i++原创 2018-01-25 20:48:19 · 273 阅读 · 0 评论 -
NCPC2017
见识了qt的分块求第k大,n*logn*sqrtn可用set水,维护比1号小组优秀的组,然后set.size()得到答案。#include#include#include#include#define maxl 100010using namespace std;int n,m;struct state{ int pent,sum,ind; bool operato原创 2018-01-25 20:46:23 · 455 阅读 · 0 评论 -
UVA12325
若s1>sqrt(n),直接枚举1,2亦然。当s1,s2v2/s2,及1的性价比更高,对于s1*s2的空间,肯定选1放,所以最后剩下的只有n%(s1*s2),这些空间就用来放2。很有道理然而我并不知道为什么错了。标解的做法是假设1性价比高的情况下,买了t1个1,t2个2,假如t2>s1 => t2*s2>s1*s2 ,而s1*s2肯定是买s2个1比较划算,所以t2一定#include原创 2017-11-15 21:51:45 · 294 阅读 · 0 评论 -
codeforces 805F
卢总教我们的big-small思想,神奇的一匹。也就是分块的思想。首先一手树形DP吧每个树的的每个点的最远长度预处理出来。对于两棵树,每一对点u,v只有两种情况,maxlen=max(maxlenu,maxlenv),一种是u的最远路+v的最远路+1>maxlen,另一钟相反。于是我们只要枚举一棵树中的点,然后对另一棵树中的点进行二分处理,前缀和优化一下,两种情况就可以logn求和了了,所以原创 2017-11-29 10:37:32 · 402 阅读 · 0 评论