data structures
文章平均质量分 50
jasonvictoryan
这个作者很懒,什么都没留下…
展开
-
codeforces 650E
原题原题题目大意给你两棵树,你要让原树变为新树,每次可以删一条边加一条边,但是在任意时刻,不能出现环,问最小步数以及删边加边的方案。解题思路首先考虑那些在初态和终态下都出现的边。这些边显然都是不动的,把它们连接的两个点合并起来。合并时要维护这个集合内的点与集合外的点的连边。答案很显然为总边数减去不动的边数,即每次删一条原树中的边,并增加一条终态的树上的边。按照任意顺序删去原树中要改变的边(u,v)(转载 2016-03-29 11:34:45 · 760 阅读 · 0 评论 -
codeforces 653F
原题原题链接题目大意给你一个长度为n≤5∗105n\leq 5*10^5的只含有左右括号字符串,问,有多少个不同的合法的字串满足正确的括号序。满足条件的括号序: 1) A=”()” 2) (A) 3) AA解题思路我们可以把((当成+1,把))当成-1,那么可以做一个前缀和sis_i,如果要求以ii位置开头的合法的括号序的个数就是求有多少个i<j≤ni<j\leq n满足sj=si−1,∀i≤原创 2016-04-15 11:31:46 · 737 阅读 · 0 评论 -
codeforces 626G
题目大意给你nn个奖池,tt张彩票,qq次修改。 每个奖池的奖金为pip_i,原来每个奖池有lil_i张彩票。 每次修改,可以把一个奖池的彩票数+1或-1。 每次修改后问投奖所能获得的奖金的最大期望,每个奖池投奖的彩票数不能超过总彩票数的一半。思路在同一个奖池中,后一张彩票的的贡献一定比前一张的贡献要小,我们可以用线段树维护,一个区间贡献最大的点的位置,以及减小一张彩票所减小的贡献最小的点。那原创 2016-03-30 21:20:30 · 1046 阅读 · 0 评论 -
如何在O(n)的时间复杂度下构造哈夫曼树
描述众所周知,合并果子是堆的入门题,而 合并果子就是构造哈夫曼树。现在问题就是,在给定有序的数组aa下,如何O(n)O(n)构造哈夫曼树。算法使用两个队列,从小到大将数组aa的元素加入队列firfir,队列secsec为空。每次我们将两个元素合并,可以证明一定是三种之一。队列firfir中的队首和第二位合并队列secsec中的队首和第二位合并队列firfir中的队首和secsec中的队首合并原创 2016-08-10 22:32:53 · 8814 阅读 · 2 评论 -
codeforces 712E
题目大意有nn个赌场,你在ii赌场时,有pip_i的概率走到i+1i+1,有1−pi1-p_i的概率走到i−1i-1.保证任何时候pi≤pi+1p_i\leq p_{i+1}有qq次操作,修改一个赌场的pp值;或者询问[l,r][l,r]表示从第ll个赌场走到jj的概率,他在走的过程中不会离开区间[l,r][l,r].解题思路设fif_i表示从ii能走到nn的概率。 易得fi=fi−1∗(1−pi原创 2016-09-12 22:48:44 · 893 阅读 · 0 评论 -
codeforces 718C
题目大意最开始给你一个大小为nn的数组aia_i,mm组询问。 第一种,给数组ll到rr的元素加上xx. 第二种,求∑ri=lfibai\sum_{i=l}^r fib_{a_i}fibxfib_x表示斐波那契数列第xx项。解题思路易得 [fibx0fibx−10]∗[1110]n=[fibx+n0fibx+n−10]{\begin{bmatrix} fib_x & fib_{x-1}\\原创 2016-09-24 12:26:19 · 887 阅读 · 0 评论 -
bzoj4785 UOJ #291 ZJOI2017 Day1 树状数组
解题思路可以打表发现 错误的树状数组ii对jj产生贡献当且仅当i≥ji\geq j. 正确的树状数组ii对jj产生贡献当且仅当i≤ji\leq j. 那么可以发现假如我的一个询问l,rl,r,产生贡献的位置只可能是l−1l-1或rr.那现在的操作就很简单了,对于一个修改,他的产生贡献的区间可以按照他的端点来分类讨论,然后就直接上树套树就好了。参考程序#include<cstdio>#incl原创 2017-03-24 11:36:22 · 1004 阅读 · 0 评论