CF843B.Interactive LowerBound

普及/提高-

通过率:0%

AC君温馨提醒

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

题目描述

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 xx .

More formally, there is a singly liked list built on an array of nn elements. Element with index ii contains two integers: valueivalue_{i} is the integer value in this element, and nextinext_{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 nexti1next_{i}≠-1 , then value_{nexti}>value_{i} .

You are given the number of elements in the list nn , the index of the first element startstart , and the integer xx .

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

  • ? i ( 1<=i<=n1<=i<=n ) — ask the values valueivalue_{i} and nextinext_{i} ,
  • ! ans — give the answer for the problem: the minimum integer, greater than or equal to xx , or ! -1, if there are no such integers. Your program should terminate after this query.

Write a program that solves this problem.

输入格式

The first line contains three integers nn , startstart , xx ( 1<=n<=500001<=n<=50000 , 1<=start<=n1<=start<=n , 0<=x<=1090<=x<=10^{9} ) — the number of elements in the list, the index of the first element and the integer xx .

输出格式

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

Interaction

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

After each query of type ? read two integers valueivalue_{i} and nextinext_{i} ( 0<=valuei<=1090<=value_{i}<=10^{9} , 1<=nexti<=n-1<=next_{i}<=n , nexti0next_{i}≠0 ).

It is guaranteed that if nexti1next_{i}≠-1 , then value_{nexti}>value_{i} , and that the array values give a valid singly linked list with startstart being the first element.

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

If nexti=1next_{i}=-1 and valuei=1value_{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 nn , startstart , xx ( 1<=n<=500001<=n<=50000 , 1<=start<=n1<=start<=n , 0<=x<=1090<=x<=10^{9} ).

In the next nn lines print the description of the elements of the list: in the ii -th line print two integers valueivalue_{i} and nextinext_{i} ( 0<=valuei<=1090<=value_{i}<=10^{9} , 1<=nexti<=n-1<=next_{i}<=n , nexti0next_{i}≠0 ).

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

输入输出样例

  • 输入#1

    5 3 80
    97 -1
    58 5
    16 2
    81 1
    79 4
    

    输出#1

    ? 1
    ? 2
    ? 3
    ? 4
    ? 5
    ! 81

说明/提示

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.

首页