CF1720D2.Xor-Subsequence (hard version)

普及/提高-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

It is the hard version of the problem. The only difference is that in this version ai109a_i \le 10^9 .

You are given an array of nn integers a0,a1,a2,an1a_0, a_1, a_2, \ldots a_{n - 1} . Bryap wants to find the longest beautiful subsequence in the array.

An array b=[b0,b1,,bm1]b = [b_0, b_1, \ldots, b_{m-1}] , where 0b0<b1<<bm1<n0 \le b_0 < b_1 < \ldots < b_{m - 1} < n , is a subsequence of length mm of the array aa .

Subsequence b=[b0,b1,,bm1]b = [b_0, b_1, \ldots, b_{m-1}] of length mm is called beautiful, if the following condition holds:

  • For any pp ( 0p<m10 \le p < m - 1 ) holds: abpbp+1<abp+1bpa_{b_p} \oplus b_{p+1} < a_{b_{p+1}} \oplus b_p .

Here aba \oplus b denotes the bitwise XOR of aa and bb . For example, 24=62 \oplus 4 = 6 and 31=23 \oplus 1=2 .

Bryap is a simple person so he only wants to know the length of the longest such subsequence. Help Bryap and find the answer to his question.
这是问题的困难版本。唯一不同的是,在这个版本中 ai109a_i \le 10^9 .

给你一个由 nn 个整数 a0,a1,a2,an1a_0, a_1, a_2, \ldots a_{n - 1} 组成的数组。布里亚普想找出数组中最长的优美子序列。

数组 b=[b0,b1,,bm1]b = [b_0, b_1, \ldots, b_{m-1}] 中的 0 \le b_0 < b_1 < \ldots < b_{m - 1} < n 是数组 aa 中长度为 mm 的子序列。

如果以下条件成立,则长度为 mm 的子序列 b=[b0,b1,,bm1]b = [b_0, b_1, \ldots, b_{m-1}] 称为优美序列:

  • 对于任意 pp ( 0 \le p < m - 1 ) 都成立: a_{b_p} \oplus b_{p+1} < a_{b_{p+1}} \oplus b_p .

这里的 aba \oplus b 表示 aabbbitwise XOR。例如, 24=62 \oplus 4 = 631=23 \oplus 1=2

Bryap 是个简单的人,所以他只想知道最长的子序列的长度。请帮助 Bryap 找到问题的答案。

输入格式

The first line contains a single integer tt ( 1t1051 \leq t \leq 10^5 ) — the number of test cases. The description of the test cases follows.

The first line of each test case contains a single integer nn ( 2n31052 \leq n \leq 3 \cdot 10^5 ) — the length of the array.

The second line of each test case contains nn integers a0,a1,...,an1a_0,a_1,...,a_{n-1} ( 0ai1090 \leq a_i \leq 10^9 ) — the elements of the array.

It is guaranteed that the sum of nn over all test cases does not exceed 31053 \cdot 10^5 .
输入

第一行包含一个整数 tt ( 1t1051 \leq t \leq 10^5 )--测试用例数。测试用例说明如下。

每个测试用例的第一行包含一个整数 nn ( 2n31052 \leq n \leq 3 \cdot 10^5 )( 2n31052 \leq n \leq 3 \cdot 10^5 ) - 数组的长度。

每个测试用例的第二行包含 nn 个整数 a0,a1,...,an1a_0,a_1,...,a_{n-1} ( 0ai1090 \leq a_i \leq 10^9 ) - 数组的元素。

保证所有测试用例中 nn 的总和不超过 31053 \cdot 10^5

输出格式

For each test case print a single integer — the length of the longest beautiful subsequence.
输出

为每个测试用例打印一个整数--最长优美子序列的长度。

输入输出样例

  • 输入#1

    3
    2
    1 2
    5
    5 2 4 3 1
    10
    3 8 8 2 9 1 6 2 8 3

    输出#1

    2
    3
    6

说明/提示

In the first test case, we can pick the whole array as a beautiful subsequence because 11<201 \oplus 1 < 2 \oplus 0 .

In the second test case, we can pick elements with indexes 11 , 22 and 44 (in 00 indexation). For this elements holds: 22<412 \oplus 2 < 4 \oplus 1 and 44<124 \oplus 4 < 1 \oplus 2 .
备注

在第一个测试案例中,我们可以选择整个数组作为优美的子序列,因为 11<;201 \oplus 1 \lt; 2 \oplus 0 .

在第二个测试用例中,我们可以选取索引为 112244 (在 00 索引中)的元素。对于这些元素,我们可以 22<;412 \oplus 2 \lt; 4 \oplus 144<;124 \oplus 4 \lt; 1 \oplus 2

首页