4.26总结
t1:
看了题,思考了几分钟,发现50分很简单,70分m<=20,好像可以容斥,想想感觉还行,再看最后的数据范围,被限制的数只有300*300!!!直接dp,后面的没有限制,有可能是组合数,转换了一下模型,发现可以做,时间空间也还行,一看表还没8点,在直接开始写和继续看题中选择了直接开始写,9点多一点写完暴力+正解,放一边对拍去了
t2:
想了一会,想到了分块,莫队上,发现分块不行,感觉找个东西用回滚套一下就行,最后感觉lct应该可以(后来发现不可以),代码一定很难写,于是看第三题
t3:
看完之后毫无思路,连暴力都模糊不清,想暴力应该就有半个小时,想完就直接写了,继续想60分,发现只要优化一点就可以了,10点20,60分写完+对拍
拐回来看t2发现思路错了,只能拿30分的暴力,60分也没什么思路,40的时候,发现t3的60对拍错了,心态有点慌,赶紧打完t2的30,就去看t3的60
但是直到考试结束也没调出来
题解:
t1: 100
dp(前缀和优化)+组合数
t2:
60分:
从大到小依次加入每条边
[ l , r ] 就是 加入了所有 [ l , m ]的边后,编号不超过 r 的树边的权值之和
对于 树 结构的维护可以暴力,对于权值和的询问可以用树状数组维护
时间复杂度 O(m*n+(m+q)*logm)
100分:线段树合并区间 时间复杂度 O((m+qlogm)*n*logn) // logn算个常数
线段树合并区间:https://www.luogu.com.cn/problem/P2572
https://www.luogu.com.cn/problem/P4198
https://www.luogu.com.cn/problem/P5618
https://www.luogu.com.cn/problem/P3569
t3:
30暴力
60 二维前缀和+二维差分
check #用二维前缀和
add 二维差分
注意加上偏移量,防止负数越界