广二集训题选做


广二noi集训:
day4 C字符串:

考虑后缀树启发式合并可以得到每个\(lcp\)相邻点
如果直接数点稍有困难
考虑对于一次询问,除去左右端点的其他一定是一个最大值的极大区间
于是先对每一个值的极大区间求出区间\(lcp\),即二分长度然后询问\(l,r-x+1\)内是否有\(lcp\geq x\)的相邻点
对于询问,先处理左右端点时的,可以二分长度然后判断\(l,r-x+1\)是否有\(\geq t\)的lcp
然后按右端点排序后整体二分答案即可

day7:
A:考虑\(x,\frac{ax}{b},\frac{a^2x}{b^2}\)\(ans=\sum_{a=1}^n\sum_{(a,b)=1}\frac{n}{b^2}=2\sum_{b}^{\sqrt n}\frac{n}{b^2}\phi(b)\)
B:考虑容斥,不合法的连续段最长只有\(O(log)\)
C:似乎考虑某两个\(\geq len\)的串\(A,B\),那只需要考虑内部答案和\(A,B,AB,BA,BB\)这五种的拼接,矩乘优化

day9:
A:考虑要么新选一个,要么翻一条路径,01010->10101,就是一个模拟费用流的过程
B:有点不清楚我原来那个正确性了....,考虑从左往右处理,用栈维护右往左的所有-1,线段树内T看做1,C看做-1,栈匹配了后将T加入线段树内,维护前缀max,那么就是栈内[l,r]的数量加上线段树前缀max,code
C:建出Ac自动机用可持久化平衡树维护fail和trie父亲的答案,注意减去一下重复的,即只取父亲那个串的前len[u]-len[fail[u]]个位置的,注意把权值放在子串头

day10:
A:考虑转移有决策单调性,复杂度\(O(nklog)\),考虑按照\(a_0+a_1\)排序,那么一定只有前\(k\)个才可能买一件,因为在后面一定换成在前面买,同理按\(a_0+a_1+a_2\)排序,只有前\(k/2\)才可能买两件
依次类推总共只会提取出\(klogk\)个商店,对这些做决策单调性\(dp\)即可,找这些商店可以用nth_element,复杂度\(O(k^2log^2k+m)\)
一个细节是分治dp的时候不能直接继承上一次的min,这会破坏转移val的凸性

day11:
B:首先考虑连通块即\(点-边=1\),考虑重剖,线段树维护最小值和及个数以及历史求和标记
\(dfs\)过程每个点维护子树所有点到当前根这条链的点-边,将\(u->v\)看做\(u->lca,lca->v\)两段的答案,令\(in[u]<in[v]\),这样一定\(v\)在轻儿子,先在\(lca\)询问\(lca->v\)
然后\(dfs\)所有轻儿子,那么此时只需要考虑\(u-lca\)的,在\(v\)询问即可,注意这时候如果\(t2\)相连的x在\(lca-v\)上,多出来的边影响所有,否则如果是在前面子树内,只影响\(x\)的子树
code

day12:
A:直接树形dp,压一下上界复杂度就对了
C:考虑记数组之间距离为不同的数的个数,\(S_i\)表示i天所有人都知道的不是A的集合,如果恰好有一个\(S_i\)内的和\(A\)距离为1,那么这时候就会结束,否则所有和\(S_i\)距离为1的都会加入\(s_{i+1}\)
所以只需要求出和\(A\)距离最小的,即相同位置最多的不合法序列,如果有\(b_i>c_i\)那么所有数列都合法,为-1
直接\(dp\),需要的转移就是前面\(j,a_j-\sum_{k<j}b_j\le a_i-\sum_{k<i}a_k\)\(a_j-...c>a_i-...c\),然后可以发现这两个满足时
一定\(j<i\),于是可以\(O(nlogn)\)

day13:
A:直接两个队列维护dp即可
B:考虑显然\(n-1\)为最大答案,考虑枚举答案check,设k为体积
需要证明:如果有把\(a\)种分给\(b\)瓶的方案,那么存在\(b\)瓶分成\(a-b\)组的方案使得每组内\(x\)种体积和为\((x-1)*k\)
具体证明:考虑把每种饮料在多瓶的看做边,那么最多\(2b-a\)条边,因此至少有\(a-b\)个连通块
对于一颗树,显然是x瓶x+1种饮料
否则设\(|E|-|V|=x\),如果当前块为x,前面一定有x+1个x=-1的块,合起来也满足|E|-|V|=1
最后块数即减去\(\sum x+1\),\(=C-\sum(|E|-|V|)-C=|V|-|E|\geq b-(2b-a)=a-b\)

那么即如果存在一些子集\(|s|\)满足\(\sum_{i\in s}a_i=k*(|s|-1)\),那么只需要这些子集组成原集即可
C:可以推得\(C(x)=\frac{\sum_ib_i\prod_{j\not=i}(1-a_jx)}{\prod(1-a_jx)}\)
\(\sum_ib_i\prod_{j\not=i}(1-a_jx)=P(x)\)
多点求值求出\(P(\frac 1{a_i})\),那么就是\(Q(\frac{1}{a_t})=b_t\prod_{j\not=t}(1-\frac{a_j}{a_t})\),后面一坨利用洛必达法则后多点求值即可

day14:
A:powerful number筛模板,设\(g=Id_k\),\(f=g*h,\sum f_i=\sum_ih(i)\sum_{j=1}^{\frac n i}g(i)\),\(g\)直接拉格朗日插值算,\(h\)考虑构造/打表发现\(h(p^e)=p^k-p^{2k},e>1\)
code
B:


广二冬令营集训:

day1:
B:考虑点对贡献即可
C:似乎维护一下重心?
day2:
A:考虑求不合法的减去,只需要求出强联通方案,容斥求即可
B:在\(dfs\)树上构造边匹配,有限匹配儿子的边,否则匹配和父亲的边,只需要一直走匹配即可删去一对奇点,删去后可以发现每个连通块仍然是偶数条边
C:考虑分最后一个是否存在算,存在即相同endpos内的,否则是第一个位置出现了且后面某些长度受限未出现的
而除了这个子树以外的子树最大值就是最大的不合法的长度x,因为没在第一个位置出现过,
每个点以第一个pos的为重儿子,那么只需要对每条链处理答案,即每个子树内部都需要\(\geq x\),用栈维护每一段即可
具体实现可以参考这个
day3:
A:边分治然后每层两边求一个minkowski凸包然后把所有凸包合并只需要维护一下最优位置即可
B:上面那个cf923E
day4:
A:考虑\(f_{l,r}\),去掉\([l,r],[l+1,r],[l,r-1],[l+2,r],[l,r-2]\)单调的情况,可以证明\(f_{l,r}=f_{l+1,r-1}\),画四层递归树即可,那么也就是\(l+r\)的同一类答案相同,预处理后即可\(O(n)\)
C:考虑猫树的分治结构,一个点就只在两个线段树节点上,对于一个mid,左右两边设为w/2,w-w/2,如果某次修改一遍小于0了,和另一边的重新分配一下,这样复杂度为两个log
day5:
A:考虑即解矩阵方程\(A^{p_k}=\sum_{i=1}^kb_iA^{p_k-p_i}\),由于原本A是一个线性递推形式,所以把矩阵改成\(x^{k}\)模特征多项式\(C(x)\)的形式高斯消元解方程即可
B:考虑简单树形背包\(dp\),转移是一个\(+\&\max\)卷积,由于\(dp\)函数是凸的所以可以单次归并\(O(n)\)合并,具体是将两个差分后即可贪心选,再前缀和转回去,然后链分治合并\(dp\)即可做到\(O(nlogn)\)
code
day6

猜你喜欢

转载自www.cnblogs.com/KamiyamaShiki/p/13113605.html