数据结构
文章平均质量分 55
WorldWide_D
这个作者很懒,什么都没留下…
展开
-
[codeforces 938G]Shortest Path Queries
题目大意给定一个n个点m条边的无向联通简单图,边有边权。接下来有q次操作,操作有三种: 1. 添加一条边,保证添加后仍是简单图 2. 删除一条边,保证删除后仍是联通图 3. 给定x,y,求所有x到y的路径中所有边权异或和最小值(一条边经过多次算多次) n,m,q≤200000 边权<230<2^{30}分析首先我们联想到CF另一道题845G,这题没有前两个操作,只询问1到n的答案。 那道原创 2018-03-01 15:27:56 · 820 阅读 · 0 评论 -
[codeforces117E]Tree or not Tree
题目大意给定一个n个点的环套树,每条边有开、关两个状态。接下来m次操作,每次给定一对数(x,y),对于x到y的最短路径(如果有多条就选择经过点字典序的一条),路径上经过所有边的状态取反(开变关,关变开)。每次操作后输出只考虑开状态的边时,有多少个联通块。 n,m≤100000分析考虑在树上怎么做。 最短路径只有一条,那么直接可以确定。 对于当前的树,它的联通块个数就是n-状态为开的边的个数(连原创 2017-03-08 22:41:50 · 689 阅读 · 0 评论 -
[bzoj3531]山东省选2014 travel
题目描述S国有N个城市,编号从1到N。城市间用N-1条双向道路连接,满足 从一个城市出发可以到达其它所有城市。每个城市信仰不同的宗教,如飞天面条神教、隐形独角兽教、绝地教都是常见的信仰。为了方便,我们用不同的正整数代表各种宗教, S国的居民常常旅行。旅行时他们总会走最短路,并且为了避免麻烦,只在信仰和他们相同的城市留宿。当然旅程的终点也是信仰与他相同的城市。S国政府为每个城市标定了不同的旅行评级原创 2016-03-19 13:51:56 · 862 阅读 · 3 评论 -
[codeforces536E] Tavas on the Path
题目大意给定一棵n个节点的树,每条边有边权。m个询问,形式为(u,v,l),问题是:u到v的路径,假设长度为m,第i条边权值为xi,构造一个长度为m的01串s,如果xi≥l,那么si=1,否则si=0。对于得到的串s,假设它有k段连续的1,第i段长度为pi,那么要你输出∑ki=1f[pi]\sum_{i=1}^k f[pi],其中f数组一开始就给出。n,m≤100000 权值,l≤10910^9原创 2017-02-01 17:33:52 · 556 阅读 · 0 评论 -
[codeforces761F] Dasha and Photos
昨晚打的cf,都把F切了,结果不计rating…题目大意给定k个n*m的由小写字母组成的矩阵(给定方式:先给定一个n *m的最初矩阵,然后k个矩阵对应5个参数a,b,c,d,e,其中(a,b)是左上角,(c,d)是右下角,然后把原矩阵的这个子矩阵的字符全部改成e)。两个矩阵的距离定义为对应每个位置字符相减之差的和。问:k个矩阵中到所有其它矩阵最小的距离和。n,m≤1000 k≤300000分析n原创 2017-02-01 10:06:36 · 1337 阅读 · 3 评论 -
[bzoj3956] Count
题目大意给定一个n个元素的序列,m个询问,给出l,r,问有多少个点对(i,j)满足: 1. l≤i < j≤r 2. i=j-1或i,j之间的元素都严格小于min(ai,aj)强制在线 n≤300000 分析第2个条件很容易让人想到单调栈预处理。 按下标从小到大扫一遍序列,维护一个单调递减的栈,退栈时就可以得到一个合法的点对了。退完栈后,栈顶若还有元素,仍然能产生一个点对。 但是要注意严格原创 2017-01-31 15:41:02 · 395 阅读 · 0 评论 -
[bzoj4361]Isn
题目大意给定一个长度为n的序列A,如果当前序列不是不下降的,就必须删去其中一个数,直到得到一个不下降的序列,求可以的操作方案数模1000000007。数据范围10%:n≤10 30%:n≤20 45%:n≤50 65%:n≤200 100%:1≤n≤2000暴力做法10%直接上暴力。30%枚举哪些数删去,然后找出能最后一个删去的数,放在最后一个后剩下随便排列。 什么数能放在最后删去?假设第原创 2016-07-20 18:25:12 · 625 阅读 · 0 评论 -
[bzoj2534]Uva10829L-gap字符串
题目描述有一种形如uvu形式的字符串,其中u是非空字符串,且V的长度正好为L,那么称这个字符串为L-Gap字符串 给出一个字符串S,以及一个正整数L,问S中有多少个L-Gap子串. L≤10 字符串长≤50000分析这道题难度挺大的。。。 考虑一个合法的UVU串。假设两个U结束位置分别是i,j(i < j)。 设两个前缀i,j的最长公共后缀长度为len。那么i,j合法时满足以下两个条件:原创 2017-02-28 22:33:58 · 457 阅读 · 0 评论 -
[bzoj3682]Phorni
题目大意给你一个字符串,初始长度为len,还有一个n个元素的序列P。接下来m个操作,有三种类型,分别是: 1. 在字符串前面加入一个字符 2. 修改P中一个元素的值 3. 询问对于所有i∈[l,r],S[L-P[i]+1..L]字典序最小的i(有多个则输出最小的i,L是当前字符串长度)Data Constraint对于 100% 的数据, 1≤n≤500000, 1≤m≤800000,1≤Pi原创 2016-10-09 20:52:53 · 884 阅读 · 0 评论 -
【NOIP2016提高A组集训第16场11.15】三部曲
题目大意因为外来的入侵,国王决定在某些城市加派士兵。所有城市初始士兵数量为0。当城市i被加派了k名士兵时。城市i的所有子城市需要被加派k+1名士兵。这些子城市的所有子城市需要被加派k+2名士兵。以此类推。 q个操作:1. 给城市i增派k名士兵 2. 询问以i为根的子树的士兵总数。n≤50000 q≤100000分析在子树上维护信息的题,一般可以考虑求出dfs序,然后用数据结构维护。考虑一个增原创 2016-11-15 15:15:52 · 476 阅读 · 0 评论 -
【GDOI2017模拟12.9】最近公共祖先
题目大意给定一个n个节点的有根树,每个节点有一个权值s[i],且有颜色(最初全是白色)。有m次操作,分两种: 1. 把一个节点染黑。 2. 询问一个节点x,枚举每个黑色节点y,得到lca(x,y)=z,求所有可能的z中最大的权值n≤100000 m≤200000分析一个思路: 维护f[i]表示以i节点为根的子树中有多少个节点,当询问节点x的时候,暴力枚举它和它的所有祖先,如果枚举到一个i原创 2016-12-10 16:22:30 · 544 阅读 · 0 评论 -
[codeforces 407E]k-d-sequence
题目大意给定一个序列,以及k和d,找一个最长的连续子序列,满足给这个连续子序列加入至多k个数,然后从小到大排序,可以得到一个公差为d的等差数列。 k,n≤200000 0≤d≤10910^9所有数绝对值≤10910^9分析一波当d=0时随便搞搞。当d≠0,怎样的序列可以构造出一个合法的等差数列呢? 所有数对d取模得到的值一样,并且它们除d之后,假设最大、小值分别是max,min,序列长度为le原创 2017-03-07 17:22:35 · 435 阅读 · 0 评论 -
[codeforces455E]Function
题面Serega and Fedor play with functions. One day they came across a very interesting function. It looks like that:f(1, j) = a[j], 1 ≤ j ≤ n. f(i, j) = min(f(i - 1, j), f(i - 1, j - 1)) + a[j], 2 ≤ i ≤原创 2017-04-07 17:24:36 · 857 阅读 · 0 评论 -
[bzoj2780][Spoj]8093 Sevenk Love Oimaster
题目大意给定n个字符串,q个询问,每个询问给定一个字符串,求它在n个字符串中多少个中以连续子串形式出现。n<=10000, q<=60000 the total length of n strings<=100000, the total length of q question strings<=360000分析首先很容易想到后缀自动机。 给n个字符串建广义后缀自动机,然后每个询问串就在原创 2017-03-16 22:31:30 · 866 阅读 · 0 评论 -
[codeforces896E] Welcome home, Chtholly
题目大意给定一个n个数的序列。m次操作:1. 给区间[l,r]中所有大于x的数减x 2. 询问区间[l,r]中数值为x的数个数。n,m≤100000 1≤a[i],x≤100000分析这题?循环展开然后optimize一下就过了这是由乃题,我们应该考虑分块。值域范围比较小,我们可以直接记录cnt[i][j]表示块i中数值为j的数个数。 然后再用并查集把同一块中数值相同的元素缩在一起。 对于原创 2018-01-19 20:31:10 · 639 阅读 · 0 评论 -
[bzoj5011][Jx2017]颜色
题目大意给定n个数的序列,你需要选出一个数字集(可以为空集),使得原序列中所有未被选的数字恰好是一个非空的区间。n≤300000,1≤ai≤n分析题目等价于被选的数字恰好是一个非空的区间。 对于所有可行的极小区间,它们之间的关系只有两种:包含和没有交集。 那么可以考虑扫一遍这个序列,用单调栈按第一次出现时间维护当前未被扫完的数值。如果栈顶的数值被扫完了,那么一直退栈直到栈空或栈顶元素未被扫完。这原创 2018-01-19 10:43:27 · 453 阅读 · 0 评论 -
[codeforces903G]Yet Another Maxflow Problem
题目大意给定一个2n个节点的图,其中n个点在A集,n个点在B集。且称A集第i个点为ai(B集类似)。每个ai(i < n)向ai+1连一条给定容量的边(B也一样),还有m条边从ax连到ay,容量给定。 有q次操作,每次修改一条ax连向ax+1的边的容量(x和容量给定)。你需要对每次操作以及操作前输出以a1为源点,bn为汇点的最大流。n,m,q≤200000分析首先最大流=最小割 考虑没有修改怎么原创 2017-12-18 19:25:11 · 484 阅读 · 0 评论 -
[bzoj2131] 免费的馅饼
题目大意你在一个1*W的格子图上,最开始可以在任意位置。每一个时刻你可以向左右移动1或2格,也可以不动。第i个馅饼在ti时刻落在位置pi上,价值为vi。问你可以获得的最大价值和是多少。n≤100000 W,pi,ti≤10810^8分析设f[i]表示最后一个拿到的馅饼是i的答案。 i能转移到j,需要满足的条件是|wi−wj|≤2(tj−ti)|wi-wj|≤2(tj-ti) 可以把绝对值拆开,原创 2017-10-25 20:38:11 · 503 阅读 · 0 评论 -
[codeforces873E]Awards For Contestants
题目大意给定n个正整数,要把它们放进三个组(分别为1号组,2号,3号),也可以不放。每组至少要有一个数。同时对于对于1,2,3号组,两两直接必须满足cnt[p]≤2*cnt[q],其中cnt[x]表示x号组有多少个数。对于两个数x,y,如果x < y,那么y不能放在编号比x大的组。 定义c[x]表示x号组的最大数,d[x]是x号组的最小数。特殊地,c[-1]表示没有放的数的最大值,d[-1]同理。原创 2017-10-14 09:58:46 · 701 阅读 · 0 评论 -
[bzoj4811] [Ynoi2017]由乃的OJ
题目大意给定一棵树,n个节点,问有多少个三元组(x,y,z)(x < y < z),满足这三个点在树上距离两两相等。 n≤100000分析你可以想到一个n方的dp:设f[i][j]表示i为根的子树中,与i距离为j的节点有多少个。g[i][j]表示i为根的子树中,有多少个二元组(x,y)(x < y)满足:设d表示它们到lca的距离都为d,它们的lca到i的距离为d-j。 那么做到i节点时,先递归原创 2017-09-14 18:49:59 · 658 阅读 · 0 评论 -
[bzoj4597/Shoi2016]随机序列
题目大意给出n个数的序列A,相邻两个数之间随机出现加号、减号和乘号。m次操作,每次修改一个数,然后输出所有可能的序列答案之和模1,000,000,007的值。n,q≤100000分析考虑一段连续乘在一起的数(包括只有一个数的情况),如果它不包括第一个数,即前面可能会有加号、减号,那么它对答案的贡献为0(加减抵消掉了)。所以有用的只有从第一个数开始连续乘起来的一段。 枚举第一个加或减号出现在第i个数原创 2017-08-05 20:57:17 · 463 阅读 · 0 评论 -
[bzoj4545] DQS的trie
题目大意有一个非严格的Trie,有三种操作:新加一个子树、求Trie上本质不同的字符串个数、询问一个字符串在trie上的出现次数。分析很容易想到用SAM来做。 在线用LCT维护即可。 然而这题允许离线,这里我用了个离线的做法。 首先把最终的trie构出来,建个SAM,然后每当新加入节点就把相应的信息加进去。 现在看看如何处理两个询问: 1. 询问本质不同的字符串个数。这个显然等于当前SAM原创 2017-07-13 19:45:35 · 552 阅读 · 0 评论 -
[codeforces815D] Karen and Cards
题目大意给定N张卡牌,每张卡牌有三个属性ai,bi,ci。 现在给出三个数p,q,r,分别表示三个属性的上限。问有多少种不同的卡牌,能压制给定的N张卡牌(只要三个属性有两个的值严格大于另一卡牌即可)。其中属性值一定是正整数。1≤N,p,q,r≤500000分析可以枚举其中一个属性的值,假设枚举的是c。 那么对于ci≥c的卡牌,就一定是属性a,b去压制它。那么所有ci≤c的卡牌中,a,b各取最大值原创 2017-06-18 22:26:58 · 989 阅读 · 1 评论 -
[bzoj4825][Hnoi2017]单旋
题目大意有五种操作:给spaly插入一个数、把最小(或最大)值旋转到根(插入后不旋转)、把最小(或最大)值旋转到根后删除。每次操作输出对应节点在spaly中的深度。由于是spaly,操作是单旋的。 操作次数n≤100000,所有数互不相同分析首先是插入操作。容易发现,节点的深度是当前spaly中比它小中最大的、比它大的中最小的,两个节点深度更大值+1。 接下来是旋转&删除。旋转最小、大值的思路类原创 2017-04-19 15:50:07 · 1649 阅读 · 0 评论 -
【GDOI2017模拟11.2】相位幻击
题目大意给你一个n个节点的有根树,每个点有一个点权。有m次操作,两种操作: 1. 把一个子树的权值全部xor上一个数x 2. 询问两个节点路径上所有数的xor和n,m≤200000 点权在int范围分析看到子树修改、路径查询,top-tree? 然而没有强制在线,所以可以考虑离线做。 对于询问u,v的路径上的异或和,可以拆成u、v到根的路径的xor和,再减去lca和lca的父亲的答案。原创 2016-11-02 14:50:52 · 458 阅读 · 0 评论 -
[CF549F/51nod1472]Yura and Developers
题目大意有一个长度为n的数组a,现在要找一个长度至少为2的子段,求出这一子段的和,然后减去最大值,然后对k取余结果为0。 问这样的子段有多少个。数据范围1 ≤ n ≤ 300 000, 1 ≤ k ≤ 1 000 000, 1 ≤ ai ≤ 10910^9分析首先有一个思路:枚举每个最大值,然后确定出以它为最大值的区间,能向左(或右)扩展到哪里,这个可以打两次单调栈解决。 剩下就是统计答案了。原创 2016-09-19 22:00:44 · 746 阅读 · 0 评论 -
[bzoj3729]Gty的游戏
Description某一天gty在与他的妹子玩游戏。 妹子提出一个游戏,给定一棵有根树,每个节点有一些石子,每次可以将不多于L的石子移动到父节点,询问将某个节点的子树中的石子移动到这个节点先手是否有必胜策略。gty很快计算出了策略。但gty的妹子十分机智,她决定修改某个节点的石子或加入某个新节点。gty不忍心打击妹子,所以他将这个问题交给了你。另外由于gty十分绅士,所以他将先手让给了妹子。In原创 2016-09-06 16:15:05 · 463 阅读 · 0 评论 -
[Tjoi2016&Heoi2016]树
Description在2016年,佳媛姐姐刚刚学习了树,非常开心。现在他想解决这样一个问题:给定一颗有根树(根为1),有以下两种操作:1. 标记操作:对某个结点打上标记(在最开始,只有结点1有标记,其他结点均无标记,而且对于某个结点,可以打多次标记。)2. 询问操作:询问某个结点最近的一个打了标记的祖先(这个结点本身也算自己的祖先)你能帮帮他吗?Input输入第一行两个正整数N和Q分别表示节点个数原创 2016-07-11 15:59:07 · 869 阅读 · 0 评论 -
[Tjoi2016&Heoi2016]序列
Description佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他。玩具上有一个数列,数列中某些项的值可能会变化,但同一个时刻最多只有一个值发生变化。现在佳媛姐姐已经研究出了所有变化的可能性,她想请教你,能否选出一个子序列,使得在任意一种变化中,这个子序列都是不降的?请你告诉她这个子序列的最长长度即可 。注意:每种变化最多只有一个值发生变化。在样例输入1中,所有的变化是: 1原创 2016-07-11 15:45:58 · 677 阅读 · 0 评论 -
[TJOI&HEOI2016]排序
题目大意有一个n的排列,进行m次操作,每次操作是将一个区间升序或降序排序。 请你输出m次操作后第p个位置的值。数据范围n,m≤100000分析直接排序肯定不好做。 但是如果考虑二分答案,那么问题就变成判断最后第p个位置的值是否小于等于一个数了。 所以对于当前二分的答案mid,把a[i]≤mid的都赋值为1,a[i]>mid的赋为0。以升序排序为例,求出区间有多少个1,假设共有cnt个,那么把原创 2016-07-11 14:45:40 · 365 阅读 · 0 评论 -
【GDOI 2016 Day2】第三题 机密网络
DescriptionInputOutputSample InputSample OutputData Constraint分析第2问其实没有什么特殊的地方,所以这里只讲第1问的做法,然后第2问的思路也是一样的。对于这种环套树的问题,可以考虑先删去环上的一条边,这样它就变成了一棵树,然后统计树上的答案,最后加上必须通过删去的边的答案。树上的做法这类问题很容易联想到点剖。 对于当前一个根为x的子树,原创 2016-05-23 19:52:08 · 523 阅读 · 0 评论 -
【学习小记】用splay维护序列
在熟悉了伸展树的操作后,就可以用它来维护序列了ㄟ(≧◇≦)ㄏsplay操作伸展树的核心操作就是splay。 splay操作可以把一个节点x旋到根,那么也可以把x旋到另一个节点y的下面(即fa[x]=y)。 那么定义过程splay(x,f)为把x旋转到f下面维护区间定义伸展树的中序遍历为它要维护的序列。提取区间例如我们要提取区间[l,r]。可以先把节点l-1旋转至根,然后把r+1旋转到根的下面。那原创 2016-05-22 14:04:00 · 2273 阅读 · 3 评论 -
雨天的尾巴
Description深绘里一直很讨厌雨天。灼热的天气穿透了前半个夏天,后来一场大雨和随之而来的洪水,浇灭了一切。虽然深绘里家乡的小村落对洪水有着顽固的抵抗力,但也倒了几座老房子,几棵老树被连根拔起,以及田地里的粮食被弄得一片狼藉。无奈的深绘里和村民们只好等待救济粮来维生。不过救济粮的发放方式很特别。首先村落里的一共有n 座房屋,并形成一个树状结构。然后救济粮分m 次发放,每次选择两个房屋(x,y)原创 2016-05-21 12:47:39 · 612 阅读 · 1 评论 -
【HNOI2015】开店(shop)
题目大意给出一个n个点的二叉树。每个点、每条边都有一个权值。接下来Q个询问,每次询问所有权值为l..r之间的点到点u的最短距离之和。 题目强制在线Data Constraintn≤150000 Q≤200000 点权为非负整数且最大不超过10910^9LimitsTime Limits: 7s Memory Limits: 512MB分析这种题显然可以用点剖做。 现在有一个问题:怎样原创 2016-05-18 12:45:20 · 974 阅读 · 0 评论 -
【NOI2005】维护数列
Description请写一个程序,要求维护一个数列,支持以下6种操作:(请注意,格式栏中的下划线‘ _ ’表示实际输入文件中的空格) 1. 插入 INSERT_posi_tot_c1_c2_…_ctot 在当前数列的第posi个数字后插入tot个数字:c1, c2, …, ctot;若在数列首插入,则posi为0 2. 删除 DELETE_posi_tot 从当前数列的第posi个数字开始连续原创 2016-05-30 18:50:06 · 1519 阅读 · 0 评论 -
Delta
Description给出平面60°角坐标系(也即,以z=(1,0)和w=(0.5, 0.5sqrt(3))为一对基的坐标系)上的N条线段(端点在z,w下的坐标为整数),求图中所有正三角形的面积之和ans。显然4ans/sqrt(3)是整数。你只需输出这个值对10^9+7的模。同一片区域属于多个正三角形则计算多次。input第一行,一个整数N,为线段数目。 以下N行,每行4个整数a1,b1,a2,原创 2016-03-23 20:33:48 · 561 阅读 · 0 评论 -
【COCI2013】slasticar
题目大意给出一个长度为n的字符串A,接下来给出m个字符串,对于每个字符串B,用给出的方法去与A匹配: 1. 设B的长度为L,先与A的位置为1…L的一段进行匹配:先比较A[1]和B[1],接下来比较A[2]和B[2],直到比较完A[L]和B[L]全部匹配或出现一个不相同(即A[i]≠B[i]) 2. 如果匹配失败,则匹配A的2..L+1和B的1..L,如果得不到长度为L的串(如:A的长度为12,L原创 2016-02-11 18:46:17 · 871 阅读 · 0 评论 -
[Tjoi2016&Heoi2016]字符串
Description佳媛姐姐过生日的时候,她的小伙伴从某东上买了一个生日礼物。生日礼物放在一个神奇的箱子中。箱子外边写了一个长为n的字符串s,和m个问题。佳媛姐姐必须正确回答这m个问题,才能打开箱子拿到礼物,升职加薪,出任CEO,嫁给高富帅,走上人生巅峰。每个问题均有a,b,c,d四个参数,问你子串s[a..b]的所有子串和s[c..d]的最长公共前缀的长度的最大值是多少?佳媛姐姐并不擅长做这样的原创 2016-07-12 16:24:01 · 889 阅读 · 0 评论 -
51Nod 1295 (XOR key)
题目大意给出一个长度为N的正整数数组A,再给出Q个查询,每个查询包括3个数,L, R, X (L <= R)。求A[L] 至 A[R] 这R - L + 1个数中,与X 进行异或运算(Xor),得到的最大值是多少?Input第1行:2个数N, Q中间用空格分隔,分别表示数组的长度及查询的数量(1 <= N <= 50000, 1 <= Q <= 50000)。 第2 - N+1行:每行1个数,对应原创 2016-06-30 16:22:26 · 920 阅读 · 0 评论 -
[Codeforces150E]Freezing with Style
题目大意给你一个n个节点的树,每条边有一个美丽值c[i],求树上一条长度在l..r范围内的简单路径,使得路径上美丽值的中位数最大。 这里的中位数定义为: 设路径长度为m,那么把路径上的边的美丽值升序排序,依次为a[0],a[1],a[2]...a[m−1]a[0],a[1],a[2]...a[m-1] 那么中位数就是a[⌊x⌋]a[\lfloor_x\rfloor] For example,原创 2016-06-29 18:36:52 · 661 阅读 · 0 评论