指望得分:(20+?)+20+50数组
实际得分:50+20+20ui
rk:25spa
考得很惨,考试的时候满脑子刀剑指针
没思路,只会循环节暴力。造了数据发现出循环节的几率仍是很高的。hash
每次暴力都打不完全,只判了回到最开始的循环节,因此只有50分。class
能够用hash表或者map离散,记录每一个数的上次出现位置,这样就能拿到70分。循环
正解:把每次操做视为x2,放在模(n+m)意义下,发现就是个快速幂!map
假设a,b且a<b,操做一次后为a*2,b-a数据
放在模意义下,假设b*2%(a+b)=(b-a)%(a+b)成立co
根据同余同加性(2a+2b)%(a+b)=(a+b)%(a+b),0=0成立。
假设成立。
坏点:$a_x mod a_y=K \\a_x-K=t\ a_y $
即$a_y$是$a_x-K$的约数,用桶扫一边就能获得前一个和它构成坏点的位置,记为pre[i]
注意$a_y>K$才可计入,或者在更新$a_x-K$时考虑
连续子数组就是区间
那么一个不存在坏点的区间的充要条件就是$pre[i]<l , \forall i\in [l,r]$
对于每一个l,二分出最小的知足上述条件的r,每一个以l为左端点[l,r]的子区间都知足要求,贡献为二分长度。
用st表维护区间最大值便可。
复杂度$\Theta(n \sqrt{n} + nlogn)$
打着题解以为这好像有单调性,用单调指针可以解决。
复杂度$\Theta(n \sqrt{n})$