CF1720D2

感觉静下来能想出来?整个思路没有太容易走偏的地方,就最后一段有点难

首先看到异或想到01trie和拆位,然后看到要求最长子序列,想到dp。所以目前的想法就是01trie里存dp,然后按照某种方式找到最大的,来更新\(dp_{i}\)
不会了!\(a_{i} \oplus j>a_{j} \oplus i\)怎么搞啊。我们拆位,发现如果这两个满足条件,那一定是这两个前k-1位相同,然后k位一个1,一个0。那么就可以得到下列条件

\[a_{i,1,k-1} \oplus j,1,k-1=a_{j,1,k-1} \oplus i,1,k-1 \]

\[a_{i,k} \oplus j,k=1 \]

\[a_{j,k} \oplus i,k=0 \]

对于第一个式子直接移项,将未知数(或者字母相同的)移到一边,后面两个式子同样处理

\[a_{j,1,k-1} \oplus j,1,k-1=a_{i,1,k-1} \oplus i,1,k-1 \]

\[j,k=1 \oplus a_{i,k} \]

\[a_{j,k} = i,k \]

考虑在01trie上如何搞这个东西,发现第一个只要\(a_{j} \oplus j\)\(a_{i} \oplus i\)一样的路就行了,这启示我们将\(a_{i} \oplus i\)插到01trie中,然后记录\(ans_{u,0/1,0/1}\),也就是能走到这个点的\(a_{i,k}\)为0/1,且\(i,k\)为0/1的dp的最大值。然后走下去每一层都和\(ans[u][i,k][1 \oplus a_{i,k}]\)取最大值,最后+1就是\(dp_{i}\)了,插入就正常插入

posted @ 2024-07-21 19:34  wuhupai  阅读(5)  评论(0编辑  收藏  举报