luogu#P11478. [COCI 2024/2025 #3] 处理器 / Procesor

    ID: 35349 远端评测题 1000ms 512MiB 尝试: 0 已通过: 0 难度: 6 上传者: 标签>线段树20242025交互题Special JudgeO2优化随机化COCI(克罗地亚)Ad-hoc

[COCI 2024/2025 #3] 处理器 / Procesor

题目背景

译自 COCI 2024/2025 #3 T5。1s,0.5G\texttt{1s,0.5G}。满分为 120120

为了方便测试,公开交互库

题目描述

这是一道交互题

有一个初始时为空的数组 aa

nn 次操作,第 ii 次操作向 aa 的末尾添加 xix_i 个整数。

每次操作后,通过若干次询问,你需要找到最小的未被标记的整数对应的下标 xx,并给 axa_x 打标记。

每次询问,你可以询问两个未被标记的整数 ai,aja_i,a_j 的大小关系。

设当前数组长度为 ll,保证 1i<jl\forall 1\le i\lt j\le lai<aja_i\lt a_jaj<aia_j\lt a_i 恰有一个成立。换句话说,保证数组内元素两两不同

实现细节

首先读入一个正整数 nn。接下来依次处理 nn 次操作。

对于第 ii 次操作,读入一个正整数 xix_i,表示增加的整数数量。

接下来你可以按照以下格式询问若干次:

  • ?\texttt{?} ii jj:询问 ai,aja_i,a_j 的大小关系。
    • 返回 00,表示 ai<aja_i\lt a_j;返回 11,表示 ai>aja_i\gt a_j
    • 令当前数组长度为 ll,你需要保证 1i,jl1\le i,j\le l
    • 你需要保证 iji\neq j,且 ai,aja_i,a_j 未被标记。

按以下格式回答:

  • !\texttt{!} xx:当前数组内未被标记的最小整数为 axa_x

回答后立刻读入下一个整数 xi+1x_{i+1},若这是最后一次操作则立刻结束程序。

在每次询问或者回答后,都要换行并刷新缓冲区。 刷新缓冲区的方式:C++ 中的 std::cout.flush()std::cout<<std::endl

输入格式

见【实现细节】。

输出格式

见【实现细节】。

3

3

1

0

0

1

1

1

0

? 1 2

? 1 3

? 2 3

! 2

? 1 4

! 4

? 1 5

! 1

提示

样例解释

样例 11 中,a=[3,2,4,1,5]a=[3,2,4,1,5]

  • 查询 a1a_1a2a_2a1>a2a_1\gt a_2,返回 11
  • 查询 a1a_1a3a_3a1<a3a_1\lt a_3,返回 00
  • 查询 a2a_2a3a_3a2<a3a_2\lt a_3,返回 00

不难发现 a2a_2 为当前未标记的最小值,所以回答 22。接下来继续处理剩余的两次操作。

数据范围

对于 100%100\% 的数据,保证:

  • 1n401\le n\le 40
  • 1xi,xi20001\le x_i,\sum x_i\le 2\, 000
  • 数组内整数两两不同。

计分方式

令你的程序询问次数的最大值为 qq

  • q2700q\le 2\, 700,得 120120 分。
  • 2700<q70002\, 700 \lt q\le 7\, 000,得 7575 分。
  • 7000<q2×1047\, 000 \lt q\le 2\times 10^4,得 3535 分。
  • 2×104<q8×1042\times 10^4 \lt q\le 8\times 10^4,得 1515 分。
  • 8×104<q8\times 10^4\lt q,得 00 分。