#P1061. 猜最大值位置
猜最大值位置
题目描述
本题是交互题。
有一个长度为 的秘密序列 ,序列中的所有元素互不相同。你不能直接看到这些元素,只能通过询问获得信息。
一次询问需要指定一个连续下标区间 ,且区间长度至少为 。交互器会观察 这些数,并返回其中第二大元素在原序列中的下标。
你的目标是在最多 次询问内,确定整个序列中最大元素所在的下标。
输入格式
交互开始后,交互器首先输出一个整数 ,表示秘密序列的长度。
在本地测试中,交互器使用隐藏输入文件保存完整序列。隐藏输入格式为:
第一行一个整数 。
第二行 个整数,构成 到 的一个排列。值为 的位置即为你需要找出的答案。
输出格式
若要发起一次询问,输出:
? l r
其中 。输出后必须刷新缓冲区。交互器会返回区间 内第二大元素的下标。
若已经确定最大元素的位置,输出:
! p
其中 是整个序列最大元素的下标。最终答案不计入询问次数。输出最终答案后刷新缓冲区并结束程序。
样例
5
3
4
? 1 5
? 4 5
! 1
样例说明
样例只表示一种可能出现的交互过程。
例如隐藏序列可以是 。此时询问 ? 1 5,区间内第二大的数为 ,其下标为 ;询问 ? 4 5,区间内第二大的数为 ,其下标为 。根据这些信息,可以回答最大值所在下标为 。
数据范围
。
隐藏序列中的元素两两不同。
询问次数不能超过 。