#P12459. [UOI 2024] Zeroing the segment

[UOI 2024] Zeroing the segment

题目描述

本题采用交互式评测方式,目前仅支持 C++ 语言提交。

对于一个长度为 mm 的正整数数组 bb,我们定义 f(b)f(b) 如下:

  • 初始时设变量 xx00
  • 每次可以花费 1 枚硬币xx 的值增加 11
  • 每次可以花费 1 枚硬币 选择数组中的元素 bib_i1im1\le i\le m)并将其替换为 (bix)(b_i \oplus x),其中 \oplus 表示 按位异或 运算;
  • f(b)f(b) 表示将所有数组元素同时变为 00 所需的最少硬币数。

按位异或 运算(\oplus)的定义:对于非负整数 aabbaba \oplus b 的结果是一个非负整数,其二进制表示中某一位为 11 当且仅当 aabb 在该位的值不同。例如 $3_{10} \oplus 5_{10} = 0011_{2} \oplus 0101_{2} = 0110_{2} = 6_{10}$。

给定一个长度为 nn 的正整数数组 aaqq 个形如 llrr 的查询。对于每个查询,需要计算 f([al,al+1,,ar])f([a_l,a_{l+1},\ldots,a_r])

你需要实现以下函数:

void init(integer n, array of integers a)
  • nn —— 表示数组长度的整数;
  • aa —— 长度为 nn 的整数数组;
  • 该函数不返回任何值。
integer ask(integer l, integer r)
  • ll —— 表示查询左边界的整数;
  • rr —— 表示查询右边界的整数;
  • 该函数返回一个整数 —— f([al,al+1,,ar])f([a_l,a_{l+1},\ldots,a_r])
array of integers askAll(integer q, array of integers l, array of integers r)
  • qq —— 表示查询数量的整数;
  • ll —— 长度为 qq 的整数数组;lil_i 表示第 ii 个查询的左边界;
  • rr —— 长度为 qq 的整数数组;rir_i 表示第 ii 个查询的右边界;
  • 该函数返回一个整数数组;第 ii 个数应为第 ii 个查询的答案。

这三个函数在 C++ 语言中可以视作:

void init(int n, const vector<long long> &a);
long long ask(int l, int r);
vector<long long> askAll(int q, const vector<int> &l, const vector<int> &r);

输入格式

第一行包含三个整数 nnqqtt1n,q21051 \leq n, q \leq 2 \cdot 10^51t21 \leq t \leq 2)—— 分别表示数字数量、查询数量和查询格式。

第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n1ai<2601 \leq a_i < 2^{60})—— 数组 aa 的元素。

接下来 qq 行每行包含两个整数 llrr1lrn1 \leq l \leq r \leq n)—— 第 ii 个查询的参数。

函数 init\tt{init} 将被调用恰好一次。

如果 t=1t=1,则函数 askAll\tt{askAll} 将被调用恰好一次来处理所有查询。如果 t=2t=2,则函数 ask\tt{ask} 将被调用恰好 qq 次。

输出格式

评测程序将输出 qq 个整数,每个查询的答案各占一行。

输入输出样例 #1

输入 #1

7 6 1
5 4 3 5 7 7 7
1 4
4 7
3 7
1 7
2 6
1 1

输出 #1

9
11
12
14
12
6

输入输出样例 #2

输入 #2

7 6 2
5 4 3 5 7 7 7
1 4
4 7
3 7
1 7
2 6
1 1

输出 #2

9
11
12
14
12
6

说明/提示

评分标准

  • 33 分):t=1t=1,且对所有 1in1\le i\le nai=a1a_i=a_1
  • 88 分):t=1t=1,且对所有 iji \neq jaiaja_i \neq a_j
  • 33 分):t=1t=1,且存在自然数 mm 使得对所有 ii2m+nai<2m+12^m+n \le a_i<2^{m+1}
  • 99 分):t=1t=1,且对所有 1i<n1 \le i < naiai+1a_i \le a_{i+1}
  • 1010 分):t=1t=1,且 n,q1000n, q \le 1000
  • 1111 分):t=1t=1,且对所有 1iq1\le i\le qli=1l_i=1ri=ir_i=i
  • 1010 分):t=1t=1,且 n,q50000n, q \le 50000
  • 2525 分):t=1t=1
  • 99 分):t=2t=2,且 n,q105n, q \le 10^5
  • 1212 分):t=2t=2