集训题
JZOJ 5417
题意:求二维和与RMQ,保证每次查询的区间长宽不超过整个矩阵长宽的一半
分析:二维和没难度,二维RMQ这里因为数据有问题(?)只好开short水过,同时顺便加上了连续访问的黑科技然后卡了过去
不过正解是经典的思想,就是一种简单的变形(但好难写啊QAQ),我们考虑
f(i,j,k)
表示以
(i,j)
为左上角,边长
2k
的正方形的RMQ,然后很显然满足题意的区间只用最少
8
个就可以全部覆盖,那么这里就可以空间开的足够小了(甚至不用卡)
JZOJ 5418
题意:给出最多
分析:做过的题……首先这里如果有环的话显然答案是
0
,那么就只能是一堆森林了。然后设多一个虚拟节点,就直接树形DP,我们考虑
预处理下阶乘就好了,预处理的时候用了 O(n+lgn) 的黑科技跑进了第一页(目前)
JZOJ 5419
题意:改变某个位置上的数,改变一个区间内位置的可选情况,问每次改变后怎样选一个位置使得所有位置上数及位置间距离乘积的和最小(即选一个
k
最小化
分析:因为每个位置上的学生数目都非负,那么容易看出每个位置上距离和有单调性,我们如果不考虑某个区间可选还是不可选,那么刚刚好最后一个使得和上一个距离和的差小于等于
0
的位置就是答案
这个东西非常类似申请空间的一类线段树问题,于是我们就可以用线段树去强行维护,标记下放还挺好想的
至于有位置可选情况的操作问题,我们同样可以线段树一波,因为这里单调性和区间没什么关系,我们只要找到没被覆盖的区域里面靠左最近的可行点和靠右最近的可行点就好了(如果原来需要选的位置被覆盖了就只能这样了)
补题解
JZOJ 5232
远古时期的题目……
题意:给出
分析:现在看来似乎不是很难做?(雾)
我们考虑扫一遍的时候维护一个桶,用来表示某个取值的数的期望个数,然后考虑第
i
个数,暴力考虑
但是这个样子太暴力了,我们需要数据结构维护……考虑这里要支持的无非是区间加+区间等差型求和,差分一下(或者说考虑每个数对后面的贡献,对于
[li,ri]
范围内的就是向上的直线,然后对比
ri
大的贡献就固定了),就变成了GDOI老题的弱化版,考虑线段树标记下传的时候,直接拆成两半,中间的贡献用数列的公式直接算就好了……
对了,如果是实数怎么办?木子爷也秒掉了……用积分可以发现是 12x2 的贡献,然后就变成两边都等差数列了,多维护一个和,还是可以直接做……