首页 > 其他分享 >CF 1720 D1. Xor-Subsequence (easy version)

CF 1720 D1. Xor-Subsequence (easy version)

时间:2022-09-21 11:56:25浏览次数:92  
标签:Xor int max CF 1720 ++ oplus dp

传送门: Xor-Subsequence (easy version)

思路:
这个问题的描述类似最长不降子序列,不难想到可以设 \(dp[i]\) 为以 \(a[i]\) 结尾的最长子序列,进而得到递推方程:

\[dp[i] = max\{dp[j] \ | \ a_j \oplus i < a_i \oplus j\} + 1 \]

显然,直接接递推方程计算的复杂度为 \(O(n^2)\),还需要进一步优化。注意题中还有一个条件,即 \(a_i<200\)

因为 \(200<256\),所以 \(a\) 数组中的数只会影响异或值(二进制下)的后 \(8\) 位。因此,当 \(i-j>256\) 时,我们可以忽略 \(a_i\) 和 \(a_j\) 的影响,原不等式 \(a_j \oplus i < a_i \oplus j\) 变为 \(i<j\),与 \(j < i\) 的前提矛盾,显然不可能满足

所以,对于 \(dp[i]\),我们实际上并不需要从 \(0\) 开始枚举 \(j\),只需从 \(i-256\) 开始枚举,于是复杂度变为 \(O(256n)\)

#include <bits/stdc++.h>
using namespace std;
#define fsio ios::sync_with_stdio(false)
const int maxn = 3e5+10;

int s[maxn], dp[maxn];

int main()
{
    fsio;
    int T; cin>>T;
    while(T--)
    {
        int n; cin>>n;
        for (int i = 0; i < n; i++) cin>>s[i], dp[i] = 1;
        int ans = 0;
        for (int i = 1; i < n; i++)
        {
            for (int j = max(0, i-256); j < i; j++)
                if ((s[j]^i) < (s[i]^j))
                    dp[i] = max(dp[i], dp[j]+1);
            ans = max(ans, dp[i]);
        }
        cout<<ans<<endl;
    }
    return 0;
}

标签:Xor,int,max,CF,1720,++,oplus,dp
From: https://www.cnblogs.com/pannta/p/16715092.html

相关文章

  • CF 821
    B:n个人比赛,比赛规则,1,2比赛,胜者与3比赛,再胜者与4比赛,一次类推,最后得到冠军。故必定进行n-1次比赛,游戏结束。现在给定x,y,表示对于其中任何一个人,此人赢了x场或输了y场,问......
  • [Note]CF 题乱做
    CF161CAbracadabra*2400.分治,每次有\(4\)种情况:左左,左右,右右,右左(相对于当前对称轴)。复杂度看似是\(O(n^2)\)的,但是我们可以用以个剪枝将其优化到\(O(\logn)\):如......
  • 【做题记录】CF878E
    让正数带的系数尽量大。如果要使系数最小的话,全部从左往右合并,可以让除了左端点之外全部系数为\(2\)。如果增大系数可以考虑先右再左。那么实际上就是分成若干组,组内......
  • CF1720E Misha and Paintings 题解
    神仙2700。首先统计出原数组中不同元素个数记作\(cnt\),如果\(cnt\lek\)说明元素个数不够,由于一次只能加一个颜色因此答案就是\(k-cnt\)。然后接下来要证明一个结论......
  • CF1363F题解
    好妙的dp-1的情况就是字母构成的可重集不同我们将一次操作抽象成将一个字符向前移动若干格我们设f[i][j]表示s串到了第i个字母,t串到了第j个字母的最小操作次数1.将第i......
  • 【题解】CF1733E - Conveyor
    因为每秒只放一个球,所以对于每一个\(x+y=a\)的对角线最多只有一个球且任意两个球不会相遇,所以我们只用知道第\(t-x-y\)秒放的球的移动路径即可。等价于需要求出前\(......
  • CF round 812 div2 A-D 题解
    首先第一题TravelingSalesManProblem,给出一些坐标,就是问从原点出发,然后收集所有的点,问最少需要多少次移动这个就是求收集完那曼哈顿距离,这个距离稍加观察可以发现,就是......
  • CF1694E Keshi in Search of AmShZ#800(div.2)
    题目链接https://codeforces.com/contest/1694/problem/E题意简述\(Keshi\)准备从城市\(1\)出发,前往\(AmShZ\)所在的城市\(n\).这里一共有\(n\)个城市,编号......
  • cf1722C
    example:cf1722C原始思路是用5e5的布尔数组对字符串哈希是否出现进行记录,但每次处理时初始化增加时间复杂度,大型数组增加空间复杂度,且编程时处理细节及判断较为繁琐考虑使......
  • CF522D Closest Equals
    CF522DClosestEquals题目大意现在有一个序列\(a_1,a_2,...,a_n\),还有\(m\)个查询\(l_j,r_j\)\((1≤l_j≤r_j≤n)\)。对于每一个查询,请找出距离最近的两......