12 2018 档案
摘要:建立一个超级源点和超级汇点,点与点之间的容量均为1,因为一个点只能匹配一个点,源点向所有左边的点连边,汇点向右边的点连边。最后网络的最大流即为最大匹配。 cpp include include include define MAXN 2005 struct queue { int q[MAXN],h
阅读全文
摘要:网络最大流 DInic cpp include include include define MAXN 10005 define MAXM 100005 define INF 2147483647 struct queue { int q[MAXN]; int head,tail; queue()
阅读全文
摘要:"传送门" 看到这题觉得是平衡树,因为有查找第k大和插入删除操作。 但是我不会平衡树啊……所以拿树状数组写了一个伪平衡树。 对于插入操作,直接插,但是要减掉一个rec值。这个rec是什么意思等下说。 对于删除操作,直接删就行了。 对于A,我们肯定不行把所有数字都加一遍,于是利用rec,使rec这个变
阅读全文
摘要:"传送门" 细节题…… 首先离散化。 然后用线段树维护最大值 因为左端点和右端点的存在性,要做一系列的讨论。
阅读全文
摘要:"传送门" 最初用线段树写,莫名其妙挂掉了…… 于是开始单调栈: 如果后来的数大于前面的数,那么前面的数一定不会作为答案,出栈。 否则直接插入即可,并记录编号。 那么查询操作,只需要二分查找即可。 cpp include include include define MAXN 200005 stru
阅读全文
摘要:"传送门" 开始用莫队水了90分。 想了很久还是没想出来,于是看了一眼题解。妙!实在妙! 考虑一个数字只被算一次?那么其他的数应该被删掉。 对于一个固定的右区间端点,显然删的数越往后越好。 于是考虑把所有询问的区间按右端点排序,然后开始扫一遍。用树状数组维护前缀和。 cpp include incl
阅读全文
摘要:"传送门" 直接普通莫队敲上去。问题在于每只袜子对于答案的贡献。1只袜子的恭喜是0,2只是1,3只是3……其实就是x的贡献是$1+2+3+...+(x 1)$,这里直接等差数列求和就行了。 最后求出gcd,就可以得到最简分式
阅读全文
摘要:"传送门" 直接莫队即可。 cpp include include include include define MAXN 50005 struct Node { int l,r,num,ans; }G[MAXN]; int book[MAXN]; int cur[MAXN],rec[MAXN];
阅读全文
摘要:"传送门" 发现最多只有20行,所以开20个线段树处理即可。当然存在更优的做法,就是一行接着一行,变成一个线段树,节省空间。 cpp include include include define MAXN 1000006 define lson (rt 1) define sizel (((l+r)
阅读全文
摘要:前言 对于一个维护区间的问题,最暴力的方法就是每次枚举区间,进行统计。 而这就是莫队的基本思路 但不过莫队的枚举是进行优化的,可以优化到$O(N\sqrt{N})$ 基本思路 首先:已知$[L,R]$的答案,那么求$[L 1,R]$ 、$[L+1,R]$ 、$[L,R 1]$、$[L,R+1]$的代
阅读全文