#B4. 猜数(I/O 式)

猜数(I/O 式)

题目背景

本题为“交互(I/O 式)”类型题目的测试用题。

题目描述

这是一道交互题。

你需要猜出一个 1n1 \sim n 之间的整数 xx

每次你可以询问一个 1n1 \sim n 之间的整数 yy,然后得知 xxyy 的大小关系(小于、大于、或等于)。

你需要在 log2n\lfloor \log_2 n \rfloor 次内猜出这个整数 xx

输入格式

第一行,一个正整数 nn

交互方式

通过? y 的格式输出进行一次询问,你需要保证 yy1n1 \sim n 之间的整数。你最多进行 log2n\lfloor \log_2 n \rfloor 次询问。

询问的输出结束后,交互器将输出一个字符,为 >=< 三种之一。为 > 则表示 x>yx > y,其他同理。

通过! x 的格式输出报告答案,你需要保证 xx1n1 \sim n 之间的整数。这次交互不算在询问的次数内。

如果你猜错了,交互器将输出 -1,并且该测试点的结果将为答案错误(WA)。否则,交互器将不会输出。

在报告一次答案后,无论你是否猜对,你的程序应当立即结束。

如果你的某一次输出无效,交互器将输出 -1,并且该测试点的结果将为答案错误(WA)

如果你的程序接收到了 -1 而非有效回应,那么它应当立即结束,否则该测试点的结果可能不确定,因为它可能在从已关闭的流中读入。

在每次输出结束后,切记要输出换行符并刷新缓冲区:

  • 在 C/C++ 中,使用 fflush(stdout)
  • 在 C++ 中,使用 std::cout.flush()std::cout << std::flush
  • 在 Pascal 中,使用 flush(output)
  • 在 Python 中,使用 stdout.flush()
  • 其它语言请自行查阅文档。

样例

7

<

>


? 4

? 2

! 3

数据范围

对于所有测试数据,1xn1051 \le x \le n \le 10^5