AGC015
D A or...or B Problem
\(l,r\) 的公共前缀可以先扔掉,设 \(r\) 的最高位为 \(x\),次高位为 \(y\)。
\([l,2^x)\) 和 \(2^x\) 可以拼出 \([l+2^x,2^{x+1})\)
\([2^x,2^x+2^y)\) 和 \(2^y+2^x\) 可以拼出 \([2^x,2^x+2^{y+1})\)
把这两个区间和 \([l,r]\) 并起来求区间并即可。
E Mr.Aoki Incubator
按 \(v\) 排序,对于每个 \(i\) 找到最小的 \(p\) 使得 \(x_p\ge x_i\),设 \(l_i=p\),同理设 \(r_i\)。
则 \(i\) 能够染的点有且仅有 \([l_i,r_i]\) 中的点。
对于 \([l_i,i]\) 中 \(x\le x_i\) 这些点,会和 \(i\) 相遇;\(x>x_i\) 这些点会和 \(p\) 相遇。\(r\) 同理。
对于 \([1,l_i)\) 中的点,都满足 \(x<x_i\),且 \(v<v_p,v_i\),所以这些点怎么都不会被 \(i\) 染色。
求出 \(l_i,r_i\) 后,问题变为了选几个区间使得并为 \([1,n]\),dp 解决。
设 \(f_i\) 表示选了 \(i\),且覆盖到 \([1,r_i]\) 的方案数,能转移的 \(j\) 要满足 \(r_j>=l_i-1\),根据定义很显然 \(l_i,r_i\) 是单调的,所以维护一个指针再前缀和可以求出答案。