上一页 1 ··· 25 26 27 28 29 30 31 32 33 ··· 65 下一页
摘要: 容易想到建一棵平衡树,修改时打上标记即可。但是修改会导致平衡树结构被破坏。注意到实际上只有[k+1,2k)这一部分数在平衡树中的位置会被改变,所以对这一部分暴力修改,因为每次都会使其至少减小一半,复杂度非常正确。 开始写的玩意一个点要跑10s吓到我了,卡了半天常(最后也只是在darkbzoj上过了) 阅读全文
posted @ 2018-12-01 17:18 Gloid 阅读(242) 评论(0) 推荐(0) 编辑
摘要: 一个显然的dp是设f[i][j]为i子树内权值<=j时的答案,则f[i][j]=Σf[son][j],f[i][a[i]]++,f[i][a[i]+1~n]对其取max。这样是可以线段树合并的,但实在太弱了不太会。 另一种做法是考虑扩展经典的单调队列优化LIS的做法,维护子树内答案为k时最小的最大值 阅读全文
posted @ 2018-12-01 02:01 Gloid 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 首先将每个括号序列转化为三元组(ai,bi,ci),其中ai为左括号-右括号数量,bi为前缀最小左括号-右括号数,ci为序列长度。问题变为在满足Σai=0,bi+Σaj>=0 (j<i)的情况下,最大化Σci。 考虑在确定了选哪些序列的情况下如何排列能够尽量满足条件。显然应该把ai>0的放在前面,< 阅读全文
posted @ 2018-11-30 21:58 Gloid 阅读(352) 评论(0) 推荐(0) 编辑
摘要: 不妨设a1<a2<a3<a4。显然第一问的答案是4,满足a1+a4=a2+a3,a1+a2|a3+a4,a1+a3|a2+a4。容易发现将其同时扩大k倍是仍然满足条件的,于是考虑gcd(a1,a2,a3,a4)=1的情况。对于a1+a3|a2+a4,由a1+a4=a2+a3,可以发现a2+a4<3( 阅读全文
posted @ 2018-11-30 18:30 Gloid 阅读(226) 评论(0) 推荐(0) 编辑
摘要: 即求删掉一个子序列的gcd之和。注意到前后缀gcd的变化次数都是log级的,于是暴力枚举前缀gcd和后缀gcd即可。 阅读全文
posted @ 2018-11-30 17:46 Gloid 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 如果要在某点买入某物品并在另一点卖出,肯定是走其间最短路径。于是预处理任意两点间的收益和最短路径,连完边二分答案判负环即可,可以全程floyd。注意inf大小。 阅读全文
posted @ 2018-11-30 02:35 Gloid 阅读(128) 评论(0) 推荐(0) 编辑
摘要: 容易发现跟树没什么关系,可以预处理出每个点若走向分叉点期望走多少步才能回到上个存档点,就变为链上问题了。考虑dp,显然有f[i][j]表示在i~n中设置了j个存档点,其中i设置存档点的最优期望步数。转移枚举下一个存档点设在哪,则有f[i][j]=min(f[k][j-1]+d[i][k]),其中d[ 阅读全文
posted @ 2018-11-29 23:05 Gloid 阅读(341) 评论(0) 推荐(0) 编辑
摘要: A:签到。 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; #define ll long 阅读全文
posted @ 2018-11-29 19:42 Gloid 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 字符串扔进trie,vector记录每个前缀出现次数的最大值的更新记录即可。 阅读全文
posted @ 2018-11-28 21:50 Gloid 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 对每个子串暴力匹配至失配三次即可。可以用SA查lcp。然而在bzoj上被卡常了。当然也可以二分+哈希或者SAM甚至FFT。 阅读全文
posted @ 2018-11-28 20:40 Gloid 阅读(194) 评论(0) 推荐(0) 编辑
上一页 1 ··· 25 26 27 28 29 30 31 32 33 ··· 65 下一页