![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
acm
文章平均质量分 54
code到飞起
这个作者很懒,什么都没留下…
展开
-
CF 1483 F. Exam
给出n个串,问有多少对串(si,sj),si是sj的子串且不存在sk使得si是sk的子串&sk是sj的子串。首先利用ac自动机可以找到原创 2021-06-06 07:14:52 · 132 阅读 · 0 评论 -
D. Odd Mineral Resource
由于是统计树上某个区间的值,因此就是树上莫队了。套个树上莫队的模板先。。。对树上的区间进行排序,然后更新的时候判断一下更新的节点是奇还是偶,放进cnt数组里面。然后问题来了。查询的是对cnt数组的一个区间进行查询,那么这里就需要用到树状数组去二分了。这样在修改的时候就多了一个log,这样就T了。所以不能对修改做任何扩展,只能修改查询部分。继续使用分块思想。对cnt数组去分组。然后查询的时候一组一组去查询,如果组内有数据,就直接暴力返回结果。一共有sqrt(n)个组,组..原创 2021-04-21 18:53:44 · 122 阅读 · 0 评论 -
[Ynoi2016] 掉进兔子洞
给出一个序列,和m个查询。每一个查询有3个区间,问3个区间去掉相同的数字后,一共有多少个数字。利用bitset的集合交来查询。b1&b2&b3可以统计3个区间一共有多少个相同数字。对于某个数字i,在序列里面出现了k次,那么他就占了k位。这种可以通过离散化重新分配id来实现。 fr(i,1,n+1) a[i] = lower_bound(v+1,v+1+n,a[i])-(v+1);因此一共需要n位来存储。这样就可以直接对m个查询当成是m*3个query来做了。对于每一个原创 2021-04-21 09:12:27 · 73 阅读 · 0 评论 -
「JOISC 2014 Day1」历史研究
给出一个序列,问[l,r]区间内ai个数w的权值ai*w的最大值。还是求各种区间的统计值,继续莫队。由于这里是求区间里面的单点最大值,因此不能用普通的莫队。对区间sqrt(n)分块后,一个一个区间处理。按l的区间排序。如果同区间,则按r排序。在处理同一个l区间时,由于r是有序的,r不断的往前移动o(n)。对于l,l的活动范围就是sqrt(n)。l每次都从区间的右边开始往左边移动,然后不断的统计。对于r在区间内的,这种需要特殊处理。由于r在区间内的只有sqrt(n...原创 2021-04-21 04:43:54 · 206 阅读 · 0 评论 -
#58. 【WC2013】糖果公园
给出一棵n个节点的树,每个节点都有一种颜色c[i]。q次询问[l,r]路径上的点的权值和vjwi。每一个节点的权值就是当前节点的颜色值v[c[i]]和从l到该节点经过该颜色的次数num[c[i]]对应的w值w[num[c[i]]之间的乘积(很绕,看题目描述吧,懒得描述了)这是树上莫队。分块是对子树进行。如果一个某一个子树的size满足块大小,则分成一块。void dfs1(int t, int f){ sz[t]=1; fa[t] = f; dp[t] = dp[f]+1;...原创 2021-04-20 20:08:54 · 129 阅读 · 0 评论 -
P1494 [国家集训队]小Z的袜子
给出m个查询[l,r],问[l,r]区间内随机拿出两双相同袜子的概率。基础莫队题。对查询进行分块排序后,对l,r区间移来移去统计一下。这里卡常数,比较器里面不能有除法。int block_num;struct query{ int l,r,id; int block; bool operator<(const query &q) const{ if(block != q.block) return l<q.l; return ((q.block)&a.原创 2021-04-19 02:29:32 · 67 阅读 · 0 评论 -
2020牛客国庆集训派对day3
A Leftbest给出一个数列,问对于ai前面的比他大的最小值的和。用set upperbound一下就好了int main(){ int n; scanf("%d",&n); long long ans = 0; set<int> fk; for(int i = 0; i < n; ++i){ int x; scanf("%d",&x); auto it = fk.upper_bound(x); fk.i原创 2021-04-18 21:42:53 · 92 阅读 · 0 评论 -
P3690 【模板】Link Cut Tree (动态树)
题目给出N个点和m个查询,每次查询对n个点添加或者删除边,但是要保证在联通的情况下,因此无论怎么操作,他都保证是一棵树。LCT 处理一棵树上的边的添加和删除。LCT把一棵树分成很多条链,每一条链使用splay来维护,splay之间相关连接。 splay使用这条链上的节点的深度来维护。每当需要查询x到y的路径时,通过access操作,把x和y这条路径组成一棵新的splay,其他点则变成自己独立的splay。这个splay就可以做树dp来统计路径上的信息。Access(x)将x变..原创 2021-04-18 07:54:31 · 117 阅读 · 0 评论 -
2020牛客国庆集训派对day2
A: AKU NEGARAKU给出一个数组,从第一个开始走,每走m个就把该数删除。由于n很小,直接模拟就好了。int main(){ int n,m; while(cin>>n>>m){ if(!n)break; queue<int> q; for(int i = 1; i <=n; ++i)q.push(i); while(!q.empty()){ if(q.size()==1)break;.原创 2021-04-11 17:37:09 · 94 阅读 · 0 评论 -
2020牛客国庆集训派对day1
A: abb给出一个字符串,问最少在后面添加多少个字符使得该字符串是个回文串。对字符串构造后缀自动机,然后反方向跑,跑时判断是否是结尾。原创 2021-04-09 07:42:23 · 111 阅读 · 0 评论