AT_xmascon16_a Array Sum

题目描述

[problemUrl]: https://atcoder.jp/contests/xmascon16noon/tasks/xmascon16_a うさぎ准备了一个长度为 $N$ 的整数序列 $a = \{a_0, a_1, ..., a_{N-1}\}$。 你可以向うさぎ提出如下类型的问题: - 选择一组 $l, r\ (0 \leq l < r \leq N)$,使得 $r-l$ 是 $2$ 的幂(即 $1, 2, 4, 8, \ldots$),然后询问数列 $a$ 的区间 $[l, r)$ 的和,也就是 $(a_l + a_{l+1} + \ldots + a_{r-1})$。 请用尽可能少的询问次数,确定数列 $a$ 中所有数的总和。

输入格式

1. 首先,输入一个整数 $N$,表示数列的长度。 2. 接下来,你的程序可以在不超过时间限制的情况下进行任意多次询问。 1. 每次询问时,输出一行,内容为 `?` 和两个整数 $l, r$,用空格分隔。 - $l, r$ 必须满足题目中的条件。 2. 随后,输入会给出数列 $a$ 的区间 $[l, r)$ 的和。 3. 最后,输出一行,内容为 `!` 和数列 $a$ 的总和,用空格分隔。 请参考输入输出示例。

输出格式

(本题无额外输出格式说明,详见输入格式。)

说明/提示

### 限制 - $1 \leq N \leq 10^5$。 - $0 \leq a_i \leq 10^4$。 ### 评分 - 对于所有测试用例中,询问次数最多的那个用例,设其次数为 $x$,你的得分为 $900/\max(x,9)$ 的整数部分。 - 但如果有任何一个用例答案错误,则得分为 $0$。 ### 注意事项 输出答案后,**你的程序必须立即结束**。如果没有立即结束,评测结果将不可预期。如果输出不正确,评测结果也不可预期(不一定是 `WA`)。 如果你的程序正确输出答案并结束,则视为正确。 **注意,输出后必须刷新输出缓冲区,否则可能会因超时(TLE)而失败。** 各语言的输入输出方法可参考 AtCoder 以往题目(链接: [ABC 019 D: 高桥くんと木の直径](http://abc019.contest.atcoder.jp/tasks/abc019_4))。 ### 输入输出示例 以 $N=7, a = \{1,2,3,4,5,6,7\}$ 为例,给出输入输出示例。 | 输入 | 输出 | 说明 | |------|------|------| | 7 | | 给出数列长度 $N$。 | | | ? 0 1 | 询问区间 $[0,1)$ 的和。 | | 1 | | 回答为 $1$。 | | | ? 0 4 | 询问区间 $[0,4)$ 的和。 | | 10 | | 回答为 $10$。 | | | ? 1 3 | 询问区间 $[1,3)$ 的和。 | | 5 | | 回答为 $5$。 | | | ? 3 7 | 询问区间 $[3,7)$ 的和。 | | 22 | | 回答为 $22$。 | | | ! 28 | 输出答案 $28$。 | 由 ChatGPT 4.1 翻译