自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 CF 1483 F. Exam

给出n个串,问有多少对串(si,sj),si是sj的子串且不存在sk使得si是sk的子串&sk是sj的子串。首先利用ac自动机可以找到

2021-06-06 07:14:52 139

原创 F. Delete The Edges

给出一个图,求一条欧拉回路。另外加入一种模式,如果开了,则后面的是各一次删一条。由于开了之后是各一次删一条边,那么就只能是已一个点为中心来回走,不然删不掉所有的边。因此图就变成了两部分,一个是欧拉回路全删掉,一个是以一个点为中心的星图。枚举星图的中心,然后把他所有相邻的边删掉,如果此时奇数点大于1,那么肯定不存在,因此中心肯定是欧拉的终点(奇数点)。有两种情况:1. 相邻的奇数点都放在星图 如果欧拉图的奇数点等于1,该星图中心就必须也是奇数点。如果是0,则是偶数点。...

2021-05-22 19:31:17 129

原创 H. Yuezheng Ling and Dynamic Tree

给出一颗树,知道节点i的父亲是a[i],并保证了a[i]<i。给出n个询问:1. l,r区间的节点的a[i] = max(a[i]-x,1)2.问lca(u,v)由于a[i]<i,那么节点和父亲就是有序了。由于是区间询问,可以用莫队分块。按sqrt(n)分块后,记录每个节点到块的最小节点 f(i) = f(a[i])。这样就相当于把一颗树缩成了sqrt(n)个节点的树了。更新的时候,对于[l,r]区间,如果是同一个块,则暴力(sqrt(n)),如果不是同一个块..

2021-05-20 04:18:11 111

原创 CF 703 F. Pairs of Paths

给出一棵树,询问m条路径,有多少对路径相交于一点。路径相交只有两种情况,一种是相同lca,一种是不同lca。先对路径[a,b]预处理,记录lca(a,b)下a,b分别在哪个儿子。对于相同lca的:当前查询路径[a,b],则和该路径只在lca相交的路径数等于该lca(a,b)的路径总个数-在a下儿子的个数-在b下儿子的个数+ab下儿子的个数(容斥)。这里注意的是,如果先统计所有儿子的个数,那么对于单点的路径,他会自己和自己匹配,最后需要减掉。最后结果就是总和/2.如果是边处理边..

2021-05-09 02:17:58 167

原创 2020牛客国庆集训派对day4

A Digits Are Not Just Characters给出n个字符串si和一个base串s0,问si和s0的大小关系。比较的时候,先将s分割成数字串和字符串,然后对应去比较。#include <bits/stdc++.h>using namespace std;bool isdig(char c){ return c>='0'&&c<='9';}int check1(string s1, string s2){ int n.

2021-04-27 19:57:13 139

原创 CF 718 E - Group Photo

给出一个ai数组,然后构造C和P序列,两个序列的合集是1到n的排列。然后c的排列对应的a的和要小于p对应的a的和。而且C序列相隔两个数的差值要递增,P要递减。 具体还是去看题目吧(少写点字)由于C要递增,P要递减,因此只有几种情况1.C一开始是连续的,然后后面是差值为2。 (12345 7 9 11 。。。。)2.C前面放一个P,然后从2开始的第一种情况3.整个CP序列最后是C,然后前面按第一种情况4.2,3整合还有特殊的两种5. CP序列C都在最后面。6. 没有C.

2021-04-24 03:07:17 192

原创 D. Odd Mineral Resource

由于是统计树上某个区间的值,因此就是树上莫队了。套个树上莫队的模板先。。。对树上的区间进行排序,然后更新的时候判断一下更新的节点是奇还是偶,放进cnt数组里面。然后问题来了。查询的是对cnt数组的一个区间进行查询,那么这里就需要用到树状数组去二分了。这样在修改的时候就多了一个log,这样就T了。所以不能对修改做任何扩展,只能修改查询部分。继续使用分块思想。对cnt数组去分组。然后查询的时候一组一组去查询,如果组内有数据,就直接暴力返回结果。一共有sqrt(n)个组,组..

2021-04-21 18:53:44 135

原创 [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 82

原创 「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 225

原创 #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 139

原创 P1903 [国家集训队]数颜色 / 维护队列

给出一个大小为n的数组,有q次操作(查询[l,r]区间有多少个不同数或者修改某一个值)。带修改的莫队。和普通莫队不同的是多了一维时间。因此在做区间修改之间,需要把时间序列修补一下。保存查询的时候需要保存当前修改序列的时间,在查询的时候需要走到当前时间。另外在排序的时候,第二关键字r不再是奇偶block去排了,如果block相等,则按查询顺序,不相等则直接按r的大小。block的大小从sqrt(n) 变成n^2/3。int block_size;struct query{ ..

2021-04-19 19:39:42 83

原创 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 73

原创 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 100

原创 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 128

原创 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 102

原创 2020牛客国庆集训派对day1

A: abb给出一个字符串,问最少在后面添加多少个字符使得该字符串是个回文串。对字符串构造后缀自动机,然后反方向跑,跑时判断是否是结尾。

2021-04-09 07:42:23 139

原创 2020 区域赛(南京)

亚洲区域赛(南京)A:Ah, It's Yesterday Once More打表题,我也不知道为什么B:Baby's First Suffix Array Problem神题C:Certain Scientific Railgun神题D:Degree of Spanning Tree给出一个图,求一棵生成树,它的所有节点的度数不超过 n/2。这里有一个结论是:对于一棵树,最多只有一个节点的度数超过n/2。假设树有n个点,则有n-1条边,总...

2021-03-29 21:46:43 556

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除