#P12559. [UOI 2024] Zeroing the segment

    ID: 14125 远端评测题 6000ms 512MiB 尝试: 0 已通过: 0 显示难度NOI/NOI+/CTS 上传者: 标签>2024交互题Special JudgeUOI(乌克兰)

[UOI 2024] Zeroing the segment

题目描述

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

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

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

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

给定一个长度为 nn 的正整数数组 aa 和 qq 个形如 ll、rr 的查询。对于每个查询,需要计算 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);

输入格式

第一行包含三个整数 nn、qq 和 tt(1≤n,q≤2⋅1051 \leq n, q \leq 2 \cdot 10^5;1≤t≤21 \leq t \leq 2)—— 分别表示数字数量、查询数量和查询格式。

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

接下来 qq 行每行包含两个整数 ll 和 rr(1≤l≤r≤n1 \leq l \leq r \leq n)—— 第 ii 个查询的参数。

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

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

输出格式

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

7 6 1
5 4 3 5 7 7 7
1 4
4 7
3 7
1 7
2 6
1 1
9
11
12
14
12
6
7 6 2
5 4 3 5 7 7 7
1 4
4 7
3 7
1 7
2 6
1 1
9
11
12
14
12
6

提示

评分标准

  • (33 分):t=1t=1,且对所有 1≤i≤n1\le i\le n 有 ai=a1a_i=a_1;
  • (88 分):t=1t=1,且对所有 i≠ji \neq j 有 ai≠aja_i \neq a_j;
  • (33 分):t=1t=1,且存在自然数 mm 使得对所有 ii 有 2m+n≤ai<2m+12^m+n \le a_i<2^{m+1};
  • (99 分):t=1t=1,且对所有 1≤i<n1 \le i < n 有 ai≤ai+1a_i \le a_{i+1};
  • (1010 分):t=1t=1,且 n,q≤1000n, q \le 1000;
  • (1111 分):t=1t=1,且对所有 1≤i≤q1\le i\le q 有 li=1l_i=1 且 ri=ir_i=i;
  • (1010 分):t=1t=1,且 n,q≤50000n, q \le 50000;
  • (2525 分):t=1t=1;
  • (99 分):t=2t=2,且 n,q≤105n, q \le 10^5;
  • (1212 分):t=2t=2。

翻译由 DeepSeek V3 完成