摘要:
"传送门" 开始用莫队水了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]$的代 阅读全文
摘要:
"传送门" 您需要一种数据结构: 插入一个数$x$ 删除一个数$x$ 查询$x$这个数在所有数中的排名 查询排名为$x$的数 求$x$这个数的前驱(前驱定义为小于$x$的最大数)‘ 求$x$这个数的后继(后继定义为大于$x$的最小数) 平衡树 Splay cpp include include in 阅读全文
摘要:
"传送门" 这个思路在考场上就想出来了,但是没有写出来很可惜。 对于一棵树来说,求其最小字典序的dfs序非常简单,每次从小到大遍历出边即可。对于边我们考虑事先进行排序,然后再插入到邻接表里。时间复杂度为$O(N\log N)$ 对于一个图,并且$N=M$,就可以保证有且只有一个环。那么会出现一种神奇 阅读全文
摘要:
"传送门" 这题真棒! 首先是这题是边权题,为了方便处理,化为点权。可一条边有两点点啊,用哪个存权值好呢?当然是儿子啦!因为一个儿子唯一对应一个连着父亲的边。 然后这题对于线段树涉及到区间最值查询、区间修改、区间加、单点修改,我很偷懒地把单点修改弄成区间修改了。 那么运算优先级问题:区间覆盖优于区间 阅读全文
摘要:
"传送门" 这道题可以用树剖或树上差分+LCA做,思路一致。每次把两个点之间的路径+1即可,但是这里是经过一次+1次,终点除外。 这里采用树上差分+LCA,LCA使用树剖维护 树上差分的思路是:每个点的权值为其子树的权值和。 修改u到v的路径,那么$val[u]+1,val[v]+1,val[lca 阅读全文
摘要:
"传送门" emmmm裸的树剖,但是考点好像是在线段树上…… 如何维护一个区间里有多少个连续相同的数字块呢?考虑对于$a$和$b$两个区间,如果他们相接的端点颜色相同,那么合并出的新区间的$seg = seg[a] + seg[b] 1$,否则就是$seg = seg[a] + seg[b]$ 这就 阅读全文