摘要:
回顾一下可持久化线段树。 这题是经典的查询静态区间第k小。 对于主席树,可以将每个区间位置,看成第i个历史版本,然后对每个点去维护一棵树。 然后对于第i个点维护的x位置,存的值是1~i的x的前缀和。 查询的时候,比较下前缀和左边是否满足即可。 注意换到右边时,需要减去左区间个数,保证相对第k小。 / 阅读全文
摘要:
前言:准确理解题意并转化,也是非常重要的一步。 dsu on tree裸题。 对于静态链分治的理解,更加深刻了一些,对于mx等有影响的参数。 在处理轻儿子时,也需要清空,这才是真正意义上的清空操作。 // Author: levil #include<bits/stdc++.h> using nam 阅读全文
摘要:
其实不难但是被char*折磨死了。mp居然用了char*不能统计int。一定要string. 原理:好像两个值虽然相同,但是char*是地址,地址不同也算不同,所以不能判重。 回到正题: 和CF208E Blood Cousins基本一样的思路,只是这里加了个map判重。 然后上dsu on tre 阅读全文
摘要:
可以发现,统计同k级祖先数,可以看成统计k级祖先k级儿子有几个。 那么,就可以dsu on tree来统计了。 依据上面的思路,我们就可以把询问挂到k级祖先上,把询问变成统计以该祖先为根的深度为k的孩子数为多少。 那么,首选就是找这个k级祖先,因为暴力找肯定会T,所以我们可以倍增跳。 然后挂上询问, 阅读全文
摘要:
挺好的一道题: 首先,可以dsu on tree做。 这里的精髓就是当奇数个数的点 <= 1时,就能构成。(这里对2取模了。) 那么可以用异或操作来实现对二取模。同时异或两次也就相当于没有做异或操作。 所以也可以用异或来清空轻儿子的贡献。 那么就需要状压每个字母的状态。因为只有26个字母。 这里还有 阅读全文
摘要:
题意:统计每个子树里的最多颜色编号和。 注意的是,如果有多个颜色编号次数一样,那么都要加上。所以这里会爆int。 思路:dsu on tree的模板题吧。 对于重儿子保留操作,轻儿子删去。 也就是说暴力的一种优化,复杂度nlogn,不会证明。 一些细节:注意的是,所谓轻儿子的清空,就是对统计做一次- 阅读全文
摘要:
A:签到题 // Author: levil #include<bits/stdc++.h> using namespace std; typedef long long LL; typedef pair<int,int> pii; const int N = 105; const int M = 阅读全文
摘要:
带修改的莫队: 在普通莫队的基础上维护了一个修改的结构体。加上了一维时间戳。 对于查询操作,记录最近的修改位置。然后在查询操作中。 对于查询之后,还需要去维护一个修改操作,并且要维护对答案的影响。 这题有点卡常,还好我卡的好(逃 // Author: levil #include<bits/stdc 阅读全文
摘要:
sleep函数: 其实这题想考察的是欧拉函数的性质。但是后面发现,其实光看也能明白了。 对于一个质数,在[1,x)里的所有数肯定和他互质即y = x-1,那么他的sleep函数值肯定是x - (x-1) = 1。 对于一个非质数的数,他的y肯定<x-1。那么这个题就转变为求区间内的最大质数。 没有怎 阅读全文
摘要:
第一眼:啊,大水题,直接上莫队分块,70分,原地懵逼。 因为出题人疯狂加强数据,莫队的复杂度已经跟不上了orz。 考虑新的解法:首先,我们可以统计一个数出现的位置。 我们先对询问离线,进行r的升序。 那么可以发现,就算前面出现过当前数,也只能算作一个数,且因为我们按r升序。 那么这个数越后面就越能影 阅读全文