AIM Tech Round 4 (Div. 2)
D
Interactive LowerBound
Codeforces
未评级
原题
← CE →
翻译中…

This is an interactive problem.

翻译中…

You are given a sorted in increasing order singly linked list. You should find the minimum integer in the list which is greater than or equal to $*x*$.

翻译中…

More formally, there is a singly liked list built on an array of $*n*$ elements. Element with index $*i*$ contains two integers: $*value*_{*i*}$ is the integer value in this element, and $*next*_{*i*}$ that is the index of the next element of the singly linked list (or -1, if the current element is the last). The list is sorted, i.e. if $*next*_{*i*} ≠  - 1$, then $*value*_{*next*_{*i*}} > *value*_{*i*}$.

翻译中…

You are given the number of elements in the list $*n*$, the index of the first element $*start*$, and the integer $*x*$.

翻译中…

You can make up to $2000$ queries of the following two types:

翻译中…
  • ? i ($1 ≤ *i* ≤ *n*$) — ask the values $*value*_{*i*}$ and $*next*_{*i*}$,
  • ! ans — give the answer for the problem: the minimum integer, greater than or equal to $*x*$, or ! -1, if there are no such integers. Your program should terminate after this query.
翻译中…

Write a program that solves this problem.

翻译中…

Input

翻译中…

The first line contains three integers $*n*$, $*start*$, $*x*$ ($1 ≤ *n* ≤ 50000$, $1 ≤ *start* ≤ *n*$, $0 ≤ *x* ≤ 10^{9}$) — the number of elements in the list, the index of the first element and the integer $*x*$.

翻译中…

Output

翻译中…

To print the answer for the problem, print ! ans, where ans is the minimum integer in the list greater than or equal to $*x*$, or -1, if there is no such integer.

翻译中…

Interaction

翻译中…

To make a query of the first type, print ? i ($1 ≤ *i* ≤ *n*$), where i is the index of element you want to know information about.

翻译中…

After each query of type ? read two integers $*value*_{*i*}$ and $*next*_{*i*}$ ($0 ≤ *value*_{*i*} ≤ 10^{9}$, $- 1 ≤ *next*_{*i*} ≤ *n*$, $*next*_{*i*} ≠ 0$).

翻译中…

It is guaranteed that if $*next*_{*i*} ≠  - 1$, then $*value*_{*next*_{*i*}} > *value*_{*i*}$, and that the array values give a valid singly linked list with $*start*$ being the first element.

翻译中…

Note that you can't ask more than $1999$ queries of the type ?.

翻译中…

If $*next*_{*i*} =  - 1$ and $*value*_{*i*} =  - 1$, then it means that you asked more queries than allowed, or asked an invalid query. Your program should immediately terminate (for example, by calling exit(0)). You will receive "Wrong Answer", it means that you asked more queries than allowed, or asked an invalid query. If you ignore this, you can get other verdicts since your program will continue to read from a closed stream.

翻译中…

Your solution will get "Idleness Limit Exceeded", if you don't print anything or forget to flush the output, including the final answer.

翻译中…

To flush you can use (just after printing a query and line end):

翻译中…
  • fflush(stdout) in C++;
  • System.out.flush() in Java;
  • stdout.flush() in Python;
  • flush(output) in Pascal;
  • For other languages see documentation.
翻译中…

Hacks format

翻译中…

For hacks, use the following format:

翻译中…

In the first line print three integers $*n*$, $*start*$, $*x*$ ($1 ≤ *n* ≤ 50000$, $1 ≤ *start* ≤ *n*$, $0 ≤ *x* ≤ 10^{9}$).

翻译中…

In the next $*n*$ lines print the description of the elements of the list: in the $*i*$-th line print two integers $*value*_{*i*}$ and $*next*_{*i*}$ ($0 ≤ *value*_{*i*} ≤ 10^{9}$, $- 1 ≤ *next*_{*i*} ≤ *n*$, $*next*_{*i*} ≠ 0$).

翻译中…

The printed structure should be a valid singly linked list. In particular, it should be possible to reach all elements from $*start*$ by following links $*next*_{*i*}$, and the last element $*end*$ should have -1 in the $*next*_{*end*}$.

翻译中…

Note

翻译中…

You can read more about singly linked list by the following link: https://en.wikipedia.org/wiki/Linked_list#Singly_linked_list

翻译中…

The illustration for the first sample case. Start and finish elements are marked dark. image

翻译中…

样例

Input #1
5 3 80
97 -1
58 5
16 2
81 1
79 4
Output #1
? 1
? 2
? 3
? 4
? 5
! 81
InputCopy OutputCopy
题目信息
题号
844D
时间限制
1 s
内存限制
256 MB

题面与样例版权归 Codeforces 及出题人所有;中文翻译由 AI 生成(CI 管线),如有出入请以原文为准。