「Solution Set」06/07

P6109 [Ynoi2009] rprmq1

矩形加,矩形求和。但是修改都在查询前面。

trick:如果是矩形加并且没有时间的区别,可以将以为当作时间。相当于在一段时间内将序列的一段区间加。

然后可以转化为在序列的一段先加上,过一会再减掉。

查询可以看作在一段时间上所有时刻的区间最大值。可以转化为历史最大值。

我们考虑猫树分治。首先求出在 mid 上的初始状态,往左回退修改,往前加上修改,就分开求两部分的历史最大值。

其实求出初始状态只需要加入修改,然后加一个 tag就行。

Submission

SPOJ PERIODNI - Periodni

笛卡尔树。

先建出来笛卡尔树,然后直接树形 DP 就行。

树形 DP 就设 \(f_{i,j}\)\(i\) 为根的子树已经占上了 \(j\) 列的方案数。

Submission

CF1408G Clusterization Counting

组间连边都大于组内连边

trick:我们把边排序,从小到大加入图,发现如果一个联通块任意两点都有连边,那么这个联通块一定是个可以的团。而且只有这样是可以的(不用证明吧)

然后我们发现直接做不好做,但是如果建一棵克鲁斯卡尔重构树,一个节点代表一个联通块。

那么如果节点里面的边的数量是 \(\frac {n(n-1)}2\),他就可以是一组。

然后节点代表的点的范围是区间,所以可以把所有节点找出来 DP 了。

Submission

CF1422F Boring Queries

我们先考虑离线询问,发现按右端点排序,这个数能产生的最小公倍数。

然后考虑消掉之前的贡献,我们可以只要有一个质数 \(p\),就在上一个出现同等数量的 \(p\) 位置除掉 \(p\),这样包括 \(i\) 的时候和上一次以及之前的都不会算重了。

于是我们考虑主席树维护刚才的线段树,就能在线了。

posted @ 2023-06-07 22:11  cc0000  阅读(31)  评论(0编辑  收藏  举报