随笔分类 - OI
摘要:题意:给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 题解:我们枚举素数p,后面的过程和BZOJ2705一样,不同的是我们限制x>=y,假定得到的答案是ans,那么实际上答案是2*ans-1(加上x<=y,x==y重复计算了) #include <cmath> #
阅读全文
摘要:题意:求$\sum\limits_{i = 1}^N {\gcd (i,N)}$ 题解: 枚举gcd,那么仅当一个数a与N/i互质时,gcd(a*i,N)==i,这样的数有phi(N/i)个。 由于我们在计算gcd=i时,顺便可以算出gcd=N/i的答案,因此只需要枚举sqrt(N)个数即可。 #i
阅读全文
摘要:题意:求[a,b]中含有6 8或因子含有6 8的数的个数 题解: 我们用容斥的思想,先求出1->b的方案数,再减去1->a-1的方案数 首先我们一遍DFS求出所有由6和8组成的数的数量 然后将搜索得到的所有数排序,如果存在a%b==0,那就把a给删了(打个标记)。 由于得到的数非常少,所以我们可以枚
阅读全文
摘要:题意:求$\sum\limits_{i = 1}^N {\sum\limits_{j = 1}^M {f(i,j)} } $,其中f(i,j)=(0,0)与(i,j)连线上点的数量 题解: 如果一个点(x',y')在(0,0)与(x,y)的连线上,则有gcd(x',y')==gcd(x,y)。因此f
阅读全文
摘要:题意:给1到n的一个排列,按照某种顺序依次删除m个元素,每次删除一个元素之前统计整个序列的逆序对数。 题解: 离线倒着做,每次加入一个节点后新增的逆序对数量就是其左边大于它的数的个数(左边数的总数-左边小于它的数的个数)+右边小于它的数的个数 用树状数组维护求和,对于树状数组中每个节点v所对应的区间
阅读全文
摘要:题意:给定一个数列,维护:1、在a和b之间插入c 2、询问[a,b]中的第c大 题解: 权值线段树套区间线段树 外层的权值线段树中每个节点如果维护[L,R]这个区间,那么该节点所对应的线段树维护的就是[L,R]这些数在每个区间里出现了几次,也就是说如果外层线段树的某个节点维护[L,R],其所对应的内
阅读全文
摘要:题意:初始时给定一个没有边的图,维护:1、添加一条边 2、修改单点权 3、询问u到v的点权和 题解:因为只有加边的操作,所以可以用LCT来维护,剩下的就是裸的操作了。 #include <cstdio> #include <cstring> #include <cstdlib> #include <
阅读全文
摘要:题意:给定一棵树,维护:1、删除一条边 2、添加一条边 3、询问u和v是否连通 题解:LCT维护连通性 #include <cstdio> #include <cstring> #include <cstdlib> #include <iostream> #include <algorithm> u
阅读全文
摘要:题意:给定一个长度为N的数列,每个元素有一个权值w[i],表示从i出发能到i+w[i],如果结果大于N则结束,维护:1、从i出发能转移多少次 2、修改w[i] 题解:建树,在i(儿子)和i+w[i](父亲)之间连边,大于N直接连到虚根上,每次询问直接查找i到根节点路径上的点数。因为边的连接情况是动态
阅读全文
摘要:题意:给定一个树,维护:1、u到v是否有必胜策略 2、将u的权值修改为w 题解:BFS版的树链剖分 #include <cstdio> #include <cstring> #include <cstdlib> #include <iostream> #include <algorithm> usi
阅读全文
摘要:题意:给定一棵树,每次询问给出l r z,求在[l,r]区间内的每个节点i与z的最近公共祖先的深度之和 题解: 显然,暴力求解的复杂度是无法承受的。 考虑这样的一种暴力,我们把 z 到根上的点全部打标记,对于 l 到 r 之间的点,向上搜索到第一个有标记的点求出它的深度统计答案。观察到,深度其实就是
阅读全文
摘要:题意:给定一棵树,维护:1、将u的种类改为c 2、将u的权值改为w 3、求u到v路径上种类为c的点的点权和 4、求u到v路径上种类为c的点的最大点权 题解:每个宗教建一颗线段树,然后随便做……考虑到如果把每一棵线段树都建完全会MLE,所以我们开动态内存。因为给出的评级都是正整数,所以如果一个区间的和
阅读全文
摘要:题意:给定一棵树,维护:1、将a到b路径上所有的点染为c 2、求a到b路径上颜色段的数量。 题解:区间颜色段数=左区间颜色段数+右区间颜色段数-(左区间最右边的颜色==右区间最左边的颜色),用线段树来维护。 #include <cstdio> #include <cstring> #include
阅读全文
摘要:题意:给定一棵树,维护:1、将u的权值修改为v 2、求u到v路径上的最大权 3、求u到v路径上的点权和 题解:树链剖分裸题 #include <cstdio> #include <climits> #include <cstring> #include <cstdlib> #include <ios
阅读全文
摘要:题意: 给定N个操作,每种操作的格式为: 1、+a:表示将当前的结果加上a 2、-a:表示将当前的结果减去a 3、*a:表示将当前的结果乘以a 4、@a:表示将当前的结果加上a*X(X是一开始JYY输入的数) 在操作中,如果结果>R,则结果=R;如果结果<L,则结果=L。给定M个xi,求每个x在经过
阅读全文
摘要:题意:给定一棵树,维护:1、一个节点+x 2、一个子树所有节点+x 3、求x到根的路径和 题解:先跑出DFS序,那么一个节点的子树就是这个节点在DFS序中两次出现之间的节点,设s[i],e[i]为i第一次出现和第二次出现的位置,用线段树来维护求和,借鉴差分的思想,那么线段树中s[i]所对应的节点的权
阅读全文
摘要:题意:给定N个矩形,求复数个矩形所覆盖的面积和 题解: 首先我们离散化,然后按照纵坐标从下往上扫,每扫到一条边,就把这条边的边权压入线段树——规定始边边权为1,终边边权为-1 每次从下往上枚举一条边,将每两个坐标之间的间隔看成是一个点,每次枚举看那个间隔权值>1,统计下来,乘以两条边之间的距离。 当
阅读全文
摘要:题意:给定N个初始长度均为0,坐标为1-N的向y轴正坐标延伸的线段。给定M个操作,每个操作将横坐标为x的线段长度变为y,求每次操作以后(0,0)与(i,yi)的连线不被其他线段所阻挡的线段的数量。 题解:显然对于所有不被阻挡的线段,其斜率一定是单调递增的,由于每次修改只会影响到后面的线段能不能看到(
阅读全文
摘要:题意:给定一个由(,)组成的括号序列,维护:1、将[a,b]修改为同一种半括号 2、将[a,b]翻转 3、将[a,b]的(变为),)变为( 4、求[a,b]最少要添加多少个括号才能合法 题解: 不算太裸的平衡树……论标记的正确打法。 对于一个括号序列,我们总能简化成一个左边全是右括号,右边全是左括号
阅读全文
摘要:题意:给定一个数列,要求维护:1、在p之后加入tot个数 2、删除p之后tot个数 3、将p之后tot个数修改为c 4、翻转p之后tot个数 5、输出p之后tot个数的和 6、输出整个数列的最大子段和。 题解:平衡树很经典的题目了……主要说一下4和6操作,4的话因为翻转操作是可以分治的,所以可以用翻
阅读全文

浙公网安备 33010602011771号