比昨天好多了,谢天谢地。
好消息:明天放假。
坏消息:后天开学。
好消息:没暑假作业。
坏消息:拉了一堆课。
赛时
先写了T1暴力,然后一眼觉得正解是二进制位运算,所以先跑了。
T2题目给出了正解,照着打,过了 50pts,然后简单一想,过掉了。
T3写了暴力,先跑。
T4写了暴力,然后开始推性质,发现组合数,但是一直挂。
回过头看T3,发现正解写法,写了将近300行,但是到最后也没调出来,然后比赛就结束了。
总分:30+100+20+20=170。
T1
很容易发现题目上的 \(F\) 函数实际上就是 \(\log_2 (x \& -x)\),然后暴力赋值,有30pts。
对于正解,考虑二分第 \(k\) 大,\(check\) 函数的话考虑 \(F\) 函数的值只有 \(log\) 级别,对于前面的 \(n\),容易发现就是一个等差数列。
枚举 \(F\) 的取值,找到对于每个取值在查询的答案之下的数字的个数,加上等差数列,发现仍然单调,所以算法可行。
找到 \(k\) 以后,再去求每个取值中比他大的数字的和,分成两部分,等差数列直接通项公式, \(F\) 的话直接加。
然后做完了,复杂度 \(\mathcal{O}(T\log^2 V)\)。
T2
对于没有问号的情况,直接暴力。
思考正解,以当前想要保留 R
为例,我们把数列按照 R
为边界分成多个区间,判断每个 R
是否保留,DP即可。