摘要:
Description 酒足饭饱之后。 一帮人都喝醉了。 嘛,由于酒驾查的很严格,所以说接下来就是送客人回家的难题了。 嘛,接下来就是操蛋的设定。 小T把喝醉的人分成了好多组,每一组要用一部车把他们送回家睡大觉。 然后呢,每一组可以租用的车子也是不一样的,具体而言,对于第i组,有T[i]种的车子(型 阅读全文
摘要:
http://uoj.ac/problem/158 预处理dfs序,询问转为区间1的个数,用可持久化bitset预处理出所有可能的修改对应哪些位置,然后用一个bitset维护当前每个点的状态,修改时可以用xor实现 阅读全文
摘要:
维护每个位置x的上一个相等的位置pv[x],可以把询问表示成l<=x<=r,pv[x]<l的形式,对一次修改,均摊改变O(1)个pv的取值,因此可以用平衡树预处理出pv的变化,用cdq分治处理查询。 阅读全文
摘要:
用dfs序把询问表示成询问dfs序的两个区间中的信息 拆成至多9个询问(询问dfs序的两个前缀),对这些询问用莫队处理,时间复杂度$O(n\sqrt{m})$ 阅读全文
摘要:
将权值排序,设权值x排序后在[l,r]出现,x在区间中出现k次,则用[l,l+k-1]为1,[l+k,r]为0来表示x的出现次数 用bitset表示可重集中每个元素的出现次数,用莫队处理出询问区间对应的bitset,通过取and后求1的个数得到答案 阅读全文
摘要:
用dfs序转为区间加,区间第k大 分块,块内维护排序后的权值,并记录每个权值原来在块中的位置。加法操作对于整块可以打标记,零散部分因为记了每个值排序前的位置,可以直接提取出块中待修改的部分,修改后用归并排序线性重构这个块,对于查询,先把零散部分提取出来,当作普通的块处理,然后二分答案,在每个块上再二 阅读全文
摘要:
设第i个字母的权值为1<<i,则一个可重集合可以重排为回文串,当且仅当这个集合的异或和x满足x==x&-x,用莫队维护区间内有多少对异或前缀和,异或后满足x==x&-x,这样端点移动的代价为字符集大小+1=27,因此时间复杂度为$O(27n\sqrt{m})$ 阅读全文
摘要:
在线询问区间众数,传统的分块(记录块间众数和每个权值的出现次数)做法被卡空间(分块用的空间是O(块数*(块数+权值种类数))),因此考虑去掉出现次数较小的数,只用分块维护出现次数较大的数。设K为分界线,用原来的分块维护原序列中出现次数>K的数组成的部分,而出现次数<=K的数,可以通过记录一个数前面第 阅读全文
摘要:
由于查询的是树链的并的信息,同时信息不能高效合并,只能考虑用bitset维护,小范围暴力预处理以便从bitset算出答案 对树分块,保证每块是连通的且直径较小,对分出的块缩点建新树,在新树上建树上ST表,用bitset保存信息,于是每条链只需用4个bitset合并,再暴力加上零散部分 考虑到bits 阅读全文
摘要:
树链剖分,用zkw线段树维护每条链两个方向上对每一位的变换情况,由于位数较少,可以用两个unsigned long long表示 阅读全文
摘要:
用莫队求出每个询问区间对应的bitset(表示每个权值是否出现过),对于加减可以用bitset移位后取and判断,对于乘法可以直接枚举约数 阅读全文