12 2017 档案
摘要:11.10日。 我们TSOI再次来到了熟悉的燕山大学,只不过这次是真刀真枪的干了。 望着那座熟悉的小桥,身边的好友不知此行过后还有多少。 下午才到,出人意外的是这次没有住燕大宾馆而是选择了熟悉的格林豪泰。 来不及办手续就去试机了,匆匆忙忙到科技楼已是下午四点多了。 这次试机不同以往,只公开了两个机房
阅读全文
摘要:一道好题。 我们考虑旋转和翻转的循环节个数就可以了。 先说旋转: 旋转应该是朝着一个方向从旋转1个到n个 此时循环节个数为1 此时循环节个数为2 从上面两个我们可以看出旋转长度为k时,循环节长度为lcm(n,k)/k,所以循环节个数为n/lcm(n,k)/k=gcd(n,k) 再说翻转: 考虑奇偶
阅读全文
摘要:第一次学习置换群这个东西。 这题需要利用Burnside定理。 即我们求出循环节为一(转完不变)的个数的平均数也就是等价类的个数。 定义:设G={a1,a2,…ag}是目标集[1,n]上的置换群。每个置换都写成不相交循环的乘积。 c1(ak) 是在置换ak 的作用下不动点的个数,也就是长度为1的循环
阅读全文
摘要:开学了,但是我们并没有像一个正常的高二学生一样坐在教室里接受调研考试的洗礼。 暑假作业这种东西早已被甩在一旁,可以想象回去补文化课时该有多么狼狈。 大王给我们制定了周密的计划,每周两次测试,加上蔡老师的是三次,都是往年学长们做过的题。 我们一帮人那时水平都不是很高,场场都一百分左右,偶尔杰哥小柴能刷
阅读全文
摘要:基尔霍夫矩阵 *给定一个无向图G,求它生成树的个数t(G); * *算法思想: *(1)G的度数矩阵D[G]是一个n*n的矩阵,并且满足:当i≠j时,dij=0;当i=j时,dij等于vi的度数; *(2)G的邻接矩阵A[G]是一个n*n的矩阵,并且满足:如果vi,vj之间有边直接相连,则aij=1
阅读全文
摘要:裸的网络流,这里要注意对于无向图建图可以将反向图的边改为一样的,这样可以减少一半边数。 还有一个优化就是如果当前这个点已经无法延伸则堵死。 By:大奕哥
阅读全文
摘要:判断两点间连通性,建图跑floyed
阅读全文
摘要:就是利用叉积的性质,如果向量A1到向量A2是顺时针则叉积为负反之为正。 然后我们可以二分的判断找到一个点恰被两条射线夹在一起。 然后我们再判断是否l,r这两个点所连直线与点的关系。 具体资料可以参照这个BLOG https://www.cnblogs.com/yym2013/p/3673616.ht
阅读全文
摘要:首先拍完序一一对应肯定是最优的,但是修改怎么办?我们可以局部考虑一下怎么计算答案,把点离散化一下,然后对于汽车我们看做+1,加油站看做-1,如果某个点的前缀和是0那么肯定匹配上了,否则就不是,那么贡献是什么,就是这个点的前缀和的绝对值乘上这个点和下一个点的距离(离散化以前的),不懂的话自己画图试一下
阅读全文
摘要:点分治模板题。 男人必做八题。 每棵子树统计经过根节点的满足情况个数,再减去子树中不经过根节点的情况个数,类似于一个容斥。复杂度O(Nlog^2N) 注意每次getroot所定的树的大小是改变的,不能一直是n否则会退化。 By:大奕哥
阅读全文
摘要:又是一道整体二分的题目,对于每段时间进行操作,判奇环,如果两个点已经联在一起并且是个奇环那么就不是二分图,不同于之前的树状数组,我们要对并查集进行清空操作,因此我们采用按秩合并,将小的合并到大的上面,这样复杂度就变为了O(NlogN)
阅读全文
摘要:好文艺的题目。 自己犯的**错误不想再提了,特别注意这题要求三个都相等时也计入统计,所以就特别处理一下。 裸的三位偏序,CDQ+树状数组 By:大奕哥
阅读全文
摘要:这题我们可以联想为普通的最长上升子序列,既f[i]=max(f[j])+1;i>j 所以这个就有了后效性,我们只关注他的左区间对答案的贡献,也就是j<=mid i>=mid+1; 所以顺序就变为了左边,中间,右边 By:大奕哥 LIS的dp很简单,三维偏序,max[j]<a[i] a[j]<min[
阅读全文
摘要:题目要求是求出两个序列中处于相同位置区间并且最大值相同的区间个数,我们最直观的感受就是求出每个区间的最大值,这个可以O(N)的求,利用单调栈求出每个数作为最大值能够覆盖的区间。 然后我们可以在进行单调栈的时候统计一下答案,怎么统计呢?就是在一个数列弹栈的时候在另一个数列的单调栈中找到这个数,然后分别
阅读全文
摘要:这题与之前那道区间最值的题非常类似,依旧是二分区间,然后统计跨过中间点的区间贡献。 我们要选出小于等于和小于的,这样就可以算出相等的区间长了。 复杂度O(nlogn) By:大奕哥
阅读全文
摘要:我的OI生涯 第五章 千古诗才,蓬莱文章建安骨 一身傲骨,青莲居士谪仙人 李白追月逆江河 包黑斩龙顺民心 豪气压群雄,能使力士脱靴,贵妃捧砚; 仙才媲众美,不让参军俊逸,开府清新 我辈此中惟饮酒 先生在上莫题诗 酒入豪肠 七分化作月光, 剩下的三分 啸成了剑气, 绣口一吐 就是半个盛唐。 纪念余光中
阅读全文
摘要:题目的大意是求一个数列中任意一个区间的长度乘上区间最大值和最小值求和。 我们二分来做这个题,每次递归处理,然后我们只需统计所有跨过中点的区间的贡献即可。 我们枚举[l,mid]区间里的每一个数a[i] (l<=i<=mid),因为无论最大值和最小值随着区间扩大有单调性,所以我们维护两个指针,分别记录
阅读全文
摘要:题目中要求phi和miu的前缀和,利用杜教筛可以推出公式。我们令为 那么有公式 类比欧拉函数,我们可以推出莫比乌斯函数的和公式为 (公式证明懒得写了,主要核心是利用Dirichlet卷积的性质 phi * 1 =id, mu * 1 =0(n>1) 然后利用神奇的杜教筛搞一搞 ) 因为有一个n=1的
阅读全文
摘要:一个二维偏序的问题,学过了三维偏序cdq分治之后觉得这个题非常的水。只需按一维排序之后再用树状数组操作即可。——by VANE 二维偏序用cdq我是不是有病,我就是要写cdq 15000ms卡过去了 By:大奕哥
阅读全文
摘要:首先看上来就可以进行二分,但是答案是n个,所以我们进行整体二分,每次分成两个集合,一个集合可以完成,一个不可以,然后继续二分即可。 学习了Vergil学长的做法,偷懒用了vector,然后luogu上90分,懒得用数组去模拟实现了(都是细节)——by VANE
阅读全文
摘要:是一道简单的CDQ分治,等做够一些以后会做一个CDQ的专题。 对于时间和x建立确定两维加上y是三维偏序,学习了一个time标记,如果这次time不同的话就不进行操作,这样的话可以省去一般的时间。 代码 By:大奕哥
阅读全文
摘要:线段树+并查集,对于每个操作我们只需要维护他在自己子树中的最值和在整个树里的最值,类似于线段树动态开点。
阅读全文
摘要:fhq treap+启发式合并,将小的合并到大的上面,复杂度NlogN。 最好的一点是通过dfs将一个子树内的元素转到另一个元素上。 By:大奕哥
阅读全文
摘要:学了半天平衡树,选择了一道题来写一写,发现题目是裸的splay模板,但是还是写不好,这个的精髓之处在于在数列的某一个位置加入一个数列,类似于treap里面的merge,然后还学到了题解里面的的回收空间做法,利用时间换取空间也是一种非常不错的做法,由于题目中有区间翻转的操作,所以只能用splay来写,
阅读全文
摘要:By:大奕哥 今天给大家介绍行列式 引入两个概念 排列和逆序 排列即为一个序列,逆序为i<j&&a[i]>a[j]的个数记为r(a[1],a[2]...a[n]) 然后我们对于一个n^n的行列式,他的值就是Σ(-1)^r(j1,j2,j3...jn)*a[1][j1]*a[2][j2]*...*a[
阅读全文
摘要:Matrix-tree定理,给出一个无向图,问求出的生成树方案有多少种方案,利用Matrix-tree定理,主对角线第i行是i的度数,(i,j) 值为i和j之间边的数量,然后删去第一行第一列,利用初等变换求出行列式的绝对值就是答案。 附上代码——by VANE UPD:对于有向图而言 1、无向图中是
阅读全文
摘要:学习了一个新的最小生成树的算法,Boruvka(虽然我不知道怎么读)。算法思想也是贪心,类似于Kruskal。 大致是这样的,我们维护图中所有连通块,然后遍历所有的点和边,找到每一个连通块和其他连通块相连的最小的一条边,然后把连通块合并起来,重复这个操作,直到剩下一整个连通块,最开始状态是每个点是一
阅读全文
摘要:cf的一道题,非常有意思,题目是问图中是否存在两个点,使得这两个点之间有三条路径,而且三条路径没有公共点。 其实就是判断一下是否为仙人掌就行了,如果不是仙人掌的话肯定就存在,题目难在输出路径上,改了半天也不对,借鉴了一个dalao的代码。感觉非常神奇。 首先是判断是否为仙人掌,利用返祖边即可,如果一
阅读全文
摘要:写了一道欧拉回路的模板题。先判断是否是欧拉回路,有向图和无向图有一点点不同,然后就是特判独立点的存在。 之后是输出路径,和dls学的dfs,利用last数组的更新可以做到线性的复杂度,否则一不小心就会写成m^2的复杂度 附上代码——by VANE 下面的By:大奕哥 我们就直接搜索啦,对于无向图需要
阅读全文
摘要:这题贼墨迹,写了一天多。 复杂度O(nlog^4n) 用到了我会的最高端的数据结构 树链剖分套线段树套平衡树 做个树链剖分这样就可以用线段树了 做个线段树这样就可以用平衡树了 然后一层一层向下搜 二分答案 或许这就是高端的暴力吧
阅读全文
摘要:番外篇 转眼间我学oi已经一年了,可回头想想这一年来的收获也没有什么,大部分时间都荒废掉了。 下半年开学后,学物竞的王洋转来了我们电竞,虽然他之前是我的同班同学但也没怎么交流过。 这下我们又成为了oi同学。 看着他敲着openjudge我仿佛看到了当时的自己,不过他学得很快,仅仅一个月他就追上了我们
阅读全文
摘要:这道题我由于智障错误导致一直错。 在树上建主席树,加上lca思想,很简单。 BZOJ最后换行会PE。。。。
阅读全文
摘要:和大奕哥一起学习了主席树,机房里杰哥看了之后一直说可以优化空间,题解写的太low了,所以我今天写了一个动态开点的线段树来优化一波空间,bz上试了一下,确实比网上看的题解省空间。 网上的题解是每一次都新开点,是可持久化的写法,我写的是正经的线段树动态开点。 ——by VANE 附上代码
阅读全文
摘要:终于学了这个我仰慕已久的算法。 对于待修改的主席树我们只需要多开一维,进行修改后的求和。复杂度进化为O(nlog^2n) 我们需要开R0 L0两个数组记录树状数组的“路径” 然后其他操作就和主席树一样咯!
阅读全文
摘要:这个东西有很多名字,主席树,可持久化线段树,函数式线段树。 我们用前缀和的思想,对每个前缀建线段树,区间表示数的大小,进行二分。 我在B站学算法:https://www.bilibili.com/video/av4619406/?from=search&seid=273452703862300118
阅读全文
摘要:当平衡树需要可持久化的时候,意味着我们需要访问以前的某个时间点的平衡树,就要保持以前的树形态不变,新建一个时间戳,构建一棵新的树。 如果用以前的旋转treap可能就不方便做到(又要打时间戳,又要新建节点,又要旋转),而且涉及到旋转,空间可能会承受不住,我们需要用到一种新的平衡树——fhq treap
阅读全文
摘要:增加Split(分裂),Merge(合并)操作,非常好写,时间也不比普通treap慢什么。
阅读全文
摘要:对于历史版本只要从根节点入手即可,在修改的过程中再把这一时间的子树建出来。 时间复杂度O(qlog(n+q))。
阅读全文
摘要:第四章 晚上来机房的人越来越多了,我也注意到一个常年独自坐在一个角落的男人————郝哥。 郝哥为人很安静,只是那时我还不知道他好不好,就没有与他交流过什么,这个优秀的男人以后我们还会提到,这里先不讲。 从郑州回来后就开始学习那些牛逼的算法,学来学去也不忒明白,后来我们又去参加了省选,被虐的稀里糊涂的
阅读全文
摘要:裸treap,求前驱后继,这里使用了一个二维结构体。
阅读全文
摘要:出纳员是一个优秀的职业。 根据题意要构造一种数据结构使得能动态维护一个权值大于等于min的集合,并且支持查询排名等操作,数据范围来看复杂度是nlogn 由以上得出结论使用平衡树 我用的是treap,如果删的话就要把整颗左子树和根节点一起删再处理右子树的,其他操作和普通平衡树一样,可以看我之前那个模板
阅读全文
摘要:本来想作为水题刷,很快就想出了做法,结果细节实现太差改了好久。。。 根据题意你会发现其实就是求方程 ax+by=k解的个数。 此时 a=f[i],b=f[i+1],而(x,y)就是你要求的数对。 于是你就对斐波那契的每一项进行扩展欧几里得,然后计算个数,注意向上取整!!! 此时你把y转换为最大值应该
阅读全文