noip2016十连测round3
A:平均数
题意:有一天,小 A 得到了一个长度为 n 的序列。
他把这个序列的所有连续子序列都列了出来,并对每一个子序列
都求了其平均值,然后他把这些平均值写在纸上,并对它们进行排序,
最后他报出了第 k 小的平均值。
你要做的就是模仿他的过程。
做法:因为题目中的k很大,所以考虑二分答案,问题就是转化有多少个子序列的平均值小于等于k,我们把每个序列用mid减去它,然后维护一个前缀和,问题就变成了求这个前缀和数组的逆序对数,用归并排序或树状数组+离散化维护即可。
B:涂色游戏
题意:小A和小B在做游戏。他们找到了一个n行m列呈网格状的画板。小A拿出了p支不同颜色的画笔,开始在上面涂色。看
到小A涂好的画板,小B觉得颜色太单调了,于是把画板擦干净,希望涂上使它看起来不单调的颜色(当然,每个格
子里只能涂一种颜色)。小B想知道一共有多少种不单调的涂色方案。我们定义一个涂色方案是不单调的,当且仅
当任意相邻两列都出现了至少q种颜色。
做法:矩阵乘法+dp,具体见题解;
C:序列
题意:小A把自己之前得到的序列展示给了小B,不过这一次,他并不要求小B模仿他之前的行为。他给了小B一些询问,每
个询问都是lrx的形式,要求小B数出在序列的第l个到第r个元素中有多少是不小于x的。小B很快就算出来了。小A
很不甘心,于是要求动态修改这个序列……这样,他只要求每次修改后求出所有询问答案的和即可。然而小B还是
很快就算出来了,小A很生气,于是把问题抛给了你。
做法·:用线段树维护所有的询问,对每个节点开个vector,按x排序,然后对于每次修改,我们发现,改一个位置上的值,只会影响到log个区间,在每个区间上面二分即可,复杂度为nlog^2。