啊 ,是一场精神还好,但是迷之没有状态的比赛 (在错误的idea里疯狂打滚)
感觉还是对ZR有那种刻板印象,所以态度不是很好吧
不犯错的话 应该要有130的
时间安排
7.30-9.00
看题,推了推T1,但是假了
9.00-10.00
T2 50,T3 10
10.00-…
(跑路去写别的了)
题目分析
T1
弱智了,最开始想明白2的操作是改变单调性,本质就是可以选择一个区间,区间内(除端点)的位置全部-2,端点处位置-1。
贪心考虑一个位置和相邻位置匹配一定是最优的。
所以对于偶数个奇数位置的区间来说 只要里面没得0 就一定合法
因此 对于n<=5000,只要 n 2 n^2 n2 预处理+O(1)询问就可以了
预处理的时候 预处理 l l l 到 r r r 的合法答案,记作 f [ l , r ] f [l,r] f[l,r]
记录 l a s , l a s 0 las,las0 las,las0的位置,表示上一个奇数的位置,上一个0出现的位置
若 a [ i ] a[i] a[i]是偶数 那么 f [ i , j ] = f [ i , j − 1 ] f[i,j]=f[i,j-1] f[i,j]=f[i,j−1]
否则,如果 l a s 0 < l a s las0<las las0<las ,那么 f [ i , j ] = f [ i , l a s − 1 ] + 1 f[i,j]=f[i,las-1]+1 f[i,j]=f[i,las−1]+1 (1代表 l a s − j las-j las−j 形成一段)
对于 a i > 0 a_i>0 ai>0,预处理 s [ i ] = ∑ j < i s [ j ] + a [ i ] ( m o d 2 ) s[i]=\sum\limits_{j<i} s[j]+a[i] (mod2) s[i]=j<i∑s[j]+a[i](mod2)
f [ i ] [ 0 ] , f [ i ] [ 1 ] f[i][0],f[i][1] f[i][0],f[i][1]分别统计从开头到 i i i s为 0 , 1 0,1 0,1的位置有多少个
考虑奇偶性相同的位置一定可以作为答案的两端
所以每次计算答案,就取一下区间内的 f f f 值,分别记作 x , y x,y x,y
a n s = ( x − 1 ) ∗ x + y ∗ ( y − 1 ) ans=(x-1)*x+y*(y-1) ans=(x−1)∗x+y∗(y−1)
T2
50分是线段树优化,因为只有一次查询,可持久化线段树就好
T3
不会 打暴力qwq