CF1812H.Expected Twist

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

这是一个交互题。

有一个长度为 nn 的整数数组 a1,a2,…,ana_1, a_2, \dots, a_n,你无法直接看到数组内容。你的任务是找出该数组中的最小元素。

为此,你可以进行若干次查询。每次查询时,你可以选择两个整数 ll 和 rr(1≤l≤r≤n1 \leq l \leq r \leq n)。系统会返回 max⁡(al,al+1,…,ar)\max(a_l, a_{l+1}, \dots, a_r) 的值,也就是子数组 ala_l 到 ara_r 的最大值。

请找出该数组的最小值。你最多可以进行 624624 次查询。

保证 a1,a2,…,ana_1, a_2, \dots, a_n 的值均匀随机地选自 00 到 232−12^{32}-1(包含端点)。

输入格式

首先,读入一个整数 nn(1≤n≤1041 \leq n \leq 10^4),表示数组的长度。

每次你想进行查询时,输出一行 ?    l    r\texttt{?}\;\;l\;\;r(1≤l≤r≤n1 \leq l \leq r \leq n)。然后你需要读入一行,包含该查询的答案。

当你确定了答案后,输出一行 !    x\texttt{!}\;\;x,其中 xx 是数组的最小值。

每次输出查询后,不要忘记输出换行并刷新输出缓冲区,否则会收到 Idleness limit exceeded 的判罚。具体做法如下:

  • C++:使用 fflush(stdout) 或 cout.flush();
  • Java:使用 System.out.flush();
  • Pascal:使用 flush(output);
  • Python:使用 stdout.flush();
  • 其它语言请参考相关文档。

如果收到的答案为 −1-1,说明你的查询无效。此时应立即退出程序,你会收到 Wrong answer 的判罚。否则,如果继续读取输入流,你可能会收到任意判罚结果。

输出格式

见输入格式说明。

输入输出样例

  • 输入#1

    3
    
    1295320727
    
    984617979
    
    1295320727
    
    167316954

    输出#1

    ? 1 3
    
    ? 1 1
    
    ? 2 2
    
    ? 3 3
    
    ! 167316954

说明/提示

无。

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页