【题解】CF1604B XOR Specia-LIS-t

https://codeforces.com/contest/1604/problem/B

题意

给定长度为\(n\)的数列\(a_1,a_2,...a_n\),请判断是否可以将它分成若干段,使得每一段的\(LIS\)长度异或和为\(0\)\(t\)组询问。

\(t\le 10^4,\sum n\le 3\cdot 10^5,1\le a_i\le 10^9\)

解法

首先当\(n\)为偶数的时候,一个很显然的想法是将每一个\(a_i\)单独分为一段,然后就可以满足题意。

接下来我们考虑\(n\)为奇数的情况。

首先如果存在\(i\)满足\(a_i>=a_{i+1}\),那么我可以把\(a_i,a_{i+1}\)分为一段,剩下的仍然单独一段,这样我就有了偶数个\(LIS=1\)的段,同样符合题意。

所以接下来我们就只需考虑\(n\)为奇数且\(a_1,a_2,...,a_n\)严格递增的情况。

注意到由于严格递增,任意区间\(a_l\)~\(a_r\)\(LIS\)都等于\(r-l+1\),那么相当于从\(1,2,...,n\)中选择\(k\)个数(可重复)组成\(b_1,b_2,...b_k\),使得\(b_1+b_2+...+b_k=n\)\(b_1\oplus b_2\oplus ... \oplus b_n=0\)

trick:
\(\oplus\)\(+\) 对奇偶的影响一样,应用可以见诈骗题 CF1634B

由于\(b_1\oplus b_2\oplus ... \oplus b_n=0\),所以\(b\)中一定有偶数个奇数(奇数二进制末位为\(0\)),那么\(b_1+b_2+...+b_k\)一定是偶数,这与\(b_1+b_2+...+b_k=n\)矛盾。所以这种情况下一定无解。

所以最后只需考虑前两种情况即可,时间复杂度\(O(n)\)

posted @ 2021-11-02 21:28  hzy1  阅读(48)  评论(0编辑  收藏  举报