P15792 「1&0OI R1」三月雨

题目背景

**这是一道函数式交互题。请使用合适版本的 C++ 提交,建议不要使用 C++14 (GCC 9)。** >$\text{念往昔 \textcolor{66CCFF}我急旋慢转\textcolor{EE0000}你抚琴低吟}$ > >$\text{{到如今 重唱此曲却已无}\textcolor{EE0000}你}$ > >$\text{莫叹息 \textcolor{66CCFF}我再舞一曲\textcolor{EE0000}你意乱情迷}$ > >$\text{空余忆 \textcolor{AA6680}{良辰美景}多可惜}$ 过往的场景渐渐在某些方面模糊,在另一些方面却回响得愈发清晰。 即使相处的一切在日复一日的孤独中逐渐碎散,却仍未习惯身边失落的曾经存在的温度。 当试图吟哼镌刻着良辰美景的旧曲时,才发现太久的离别已使珍惜的记念闪烁不定。 不……不能忘却…… 潸然的泪织成了细密的网,隔绝着窗外静谧的春夜。

题目描述

$\text{\textcolor{66CCFF}{1}}$ 常常追忆过去。 她现在正在试图想起 $\text{\textcolor{EE0000}{0}}$ 为她弹奏的那首曲子。曲子可以被看做一个由 $n$ 个音符组成的序列 $a$,**索引从 $0$ 开始**,其中的每个音符 $a_i(0 \le i < n)$ 可以用一个非负整数来代表。 不幸的是,由于缺乏绝对音感加之离别日久,她已经忘却了每个 $a_i$ 具体是什么,这给她的追忆旅程带来极大挑战。 然而,她仍留存着某『感觉』。感觉是一个数值,与乐段内每一个音符有关。对于一个从乐曲第 $l$ 个音符开始到第 $r$ 个音符结束的乐段 $[l,r]$,她有两种感觉: - 一种感觉是这个乐段**每对不同音符的按位与**的和,即 $\displaystyle\sum_{l \le i < j \le r}{a_i \operatorname{and} a_j}$。 - 一种感觉是这个乐段**每对不同音符的按位异或**的和,即 $\displaystyle\sum_{l \le i < j \le r}{a_i \operatorname{xor} a_j}$。 这里,“每对”为无序对。$\operatorname{and}$ 和 $\operatorname{xor}$ 分别表示按位与运算和按位异或运算。 由于 $\text{\textcolor{EE0000}{0}}$ 曾经非常多次以不同的开始和结尾向 $\text{\textcolor{66CCFF}{1}}$ 演奏曲子,所以 $\text{\textcolor{66CCFF}{1}}$ 确信对于任意的 $0 \le l < r < n$,她都还记得乐段 $[l,r]$ 的两种感觉。**注意这个乐段的长度至少为 $2$。** 因为过度悲伤,$\text{\textcolor{66CCFF}{1}}$ 的 OI 水平急剧下降,无法推算还原出曲子的模样,请你帮助她!你可以向她咨询她对于一些乐段的感觉,并最后告诉她原曲每个音符是什么。 **形式化地**,有一个长为 $n$ 的**未知**序列 $a(a_0,\ldots,a_{n-1})$,定义 $f_{\operatorname{and}}(l,r) = \sum_{l \le i < j \le r}{a_i \operatorname{and} a_j}$ 及 $f_{\operatorname{xor}}(l,r) = \sum_{l \le i < j \le r}{a_i \operatorname{xor} a_j}$。你可以进行若干次操作,每次操作为给定 $0 \le l < r < n$ 并查询 $f_{\operatorname{and}}(l,r)$ 或 $f_{\operatorname{xor}}(l,r)$。你最后需要确定 $a_0,\ldots,a_{n-1}$ 的值并返回序列 $a$。 --- **【交互格式】** **你不需要也不应该实现 `main` 函数。** 你需要实现以下函数: - `std :: vector sanyueyu(int n);` - 参数 $n$ 表示乐曲的长度; - 其应该返回一个持有 `int` 类型的 `vector`,长度为 $n$,且该 `vector` 的第 $i$ 个元素为 $a_i$。 你可以调用如下函数: - `long long ask_and(int l, int r);` - `long long ask_xor(int l, int r);` - 参数 $l$ 和 $r$ 均表示询问乐段的左右端点。 - 分别返回乐段 $[l,r]$ 的第一种『感觉』和第二种『感觉』的值,即 $f_{\operatorname{and}}(l,r)$ 和 $f_{\operatorname{xor}}(l,r)$。 由于洛谷的交互机制,你应该将这些函数的原型声明在文件开头: ```cpp std :: vector sanyueyu(int n); long long ask_and(int l, int r); long long ask_xor(int l, int r); ``` 以下是一个您的程序可能的结构: ```cpp // 这里引入你需要的头文件 /* 这里放置你要声明的全局变量 */ std :: vector sanyueyu(int n); long long ask_and(int l, int r); long long ask_xor(int l, int r); std :: vector sanyueyu(int n){ std :: vector ans; /* 这里放置你的解题代码 */ return ans; } ```

输入格式

**以下为交互库的输入格式,你的程序不需要,也不应该从标准输入读入任何数据。** 第一行输入两个整数 $n,t$。$n$ 含义如题所述,$t$ 与你的测试点的得分有关,具体含义见【评分标准】。 第二行输入 $n$ 个整数,依次代表 $a_0\ldots a_{n - 1}$。

输出格式

交互库会与 Special Judge 部分进行交互,以使 Special Judge 返回特定的分数和错误信息。 **你的程序不需要,也不应该向标准输出输出任何数据。**

说明/提示

**【评分标准】** 对于每个测试点,你的程序若满足以下任意一条条件,将获得 $0$ 分: 1. 你的程序 CE/RE/TLE/MLE/UKE 了。 2. 你某一次调用 `ask_and` 或 `ask_xor` 时传入的 $l$ 和 $r$ 不满足 $0 \le l < r < n$。 3. 你返回的 `vector` 长度不为 $n$。 4. 对于你返回的 `vector`,存在一个 $i(0 \le i < n)$,使得你的 `vector` 第 $i$ 项不为 $a_i$。 对于情况 2~4,测试点将显示为 WA,并且尽管比赛中不会显示,$\text{\textcolor{66CCFF}{1}}$ 仍然会告诉你错误信息,分别为 `Error:2`、`Error:3` 和 `Error:4`,优先级递减。 否则,你将在该测试点获得分数。对于每个测试点,有一个特定的参数 $t$。设你的程序在该测试点调用 `ask_and` 和 `ask_xor` 的总次数为 $c$: - 如果 $c \le t$,那么你将获得该测试点 $100\%$ 的分数。 - 否则,你将获得 $10\%$ 的分数,测试点将显示为 WA,并返回 `Error:1`(比赛时同样不可见)。 **【数据范围】** 对于所有测试点,有: - $3 \le n \le 10^5$; - $0 \le a_i \le 10^6$; - $t \ge n + 1$。 每个测试点的具体数据范围见下表。 ::cute-table{tuack} | 测试点编号 | $n=$ | $t=$ | $a_i \le$ | |:-:|:-:|:-:|:-:| | $1$ | $3$ | $6$ | $10$ | | $2$ | ^ | $5$ | $10^6$ | | $3$ | ^ | $4$ | ^ | | $4$ | $4$ | $8$ | $10$ | | $5$ | ^ | ^ | $10^6$ | | $6$ | ^ | $6$ | ^ | | $7$ | ^ | $5$ | ^ | | $8$ | $10^5$ | $10 ^ 5\times2$ | ^ | | $9$ | ^ | $10^5+2$ | ^ | | $10$ | ^ | $10^5+1$ | ^ | **【checker 与交互库】** 为方便选手调试,本题提供了一个 checker,在附件中。它的输入格式与上文【输入格式】部分的格式相同。 使用时,你可以将你的代码粘贴到 checker 开头,或以任意合理的方式嵌入你的代码,然后运行 checker 并输入自造数据。 如果你的程序通过了该组自造数据,checker 的输出信息将以 `Accept!` 打头;否则将会以 `Error:1`~`Error:4` 打头,这些前缀的含义同【评分标准】。 checker 还会给出一些其他有利于调试的信息,请自行阅读这些信息以理解其含义。 请注意,交互库的实现与 checker **完全不同**,你的代码不应依赖 checker 的具体实现。 作为参考,交互库调用一次 `ask_and` 和 `ask_xor` 的时间复杂度均为 $O(\log \max \{a_i\})$。如果你的程序时间复杂度正确,交互库应该能在规定的时间内完成对你的程序的判定。