A. Countdown
for循环跑一跑,没啥好说的。
B. Stable Wall
如果(s_{i,j} e s_{i+1,j}),那么说明(s_{i+1,j})必须在(s_{i,j})之前先放,对于这种优先级关系很自然的就能想到拓扑排序。然后建图拓扑排序跑一跑就完事了。
C. Perfect Subarray
这题直接暴力。首先记录前缀和。对于以(i)开始的子段,枚举所有的完全平方数(sq),符合条件的子段数等于满足(sum_j = sum_{i-1} + sq, j in [i, n])的(j)的个数。用一个桶存放(sum_i)出现的次数,然后暴力跑就可以在(O(nsqrt{10^7}))的时间内解决本题。
D. Candies
将序列(a)按下标的奇偶分为两个,分别用两个线段树(T_1)和(T_2)维护,主要维护(a_i imes i)的区间和以及(a_i)的区间和。
修改和普通的线段树一样,这里不再赘述。
然后就是回答询问了,对于询问((l,r)),将其划分为两类:左端点为奇数和左端点为偶数。
对于左端点为奇数的询问,我们可以通过(T_1)获取(a_i imes i)在([l,r])的区间和,然后减去((l-1))倍(a_i)在([l,r])的区间和,就是答案中加上去的部分;通过(T_2)获取(a_i imes i)在([l+1, r])的区间和,然后减去((l-1))倍(a_i)在([l+1,r])的区间和,就是答案中减去的部分。
左端点为偶数的也差不多,奇数的改改就可以了。
总结
这场题目都是一眼题,就是C题因为犯了低级失误导致交了5发才过,不然我应该可以做到50minAK。