CF730B.Minimum and Maximum

普及/提高-

通过率:0%

AC君温馨提醒

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

题目描述

This is an interactive problem. You have to use flush operation right after printing each line. For example, in C++ you should use function fflush(stdout), in Java — System.out.flush(), in Pascal — flush(output) and in Python — sys.stdout.flush().

In this problem, you need to find maximal and minimal elements of an array. What could be simpler?

You can imagine that the jury has an array, and initially you know the only number nn — array's length.

Array's elements are numbered from 11 to nn . You are allowed to compare two elements of the array by using their indices ii and jj . There are three possible responses to this query: '<' (if aia_{i} is less than aja_{j} ), '=' (if aia_{i} is equal to aja_{j} ) and finally '>' (if aia_{i} is greater than aja_{j} ).

It's known that it's always possible to find both maximal and minimal elements of the array by using no more than comparisons, where  x⌈\ x⌉ is the result of rounding xx up.

Write the program that will find positions of the minimum and the maximum in the jury's array of length nn , by using no more than f(n)f(n) comparisons.

输入格式

输出格式

Each test for this problem will contain one or more arrays. You have to find positions of minimal and maximal elements for each of these arrays. The first line of the input contains integer TT ( 1<=T<=10001<=T<=1000 ) — number of arrays in the test.

Thus, at the beginning, you program should read number TT , and then it should solve the problem for TT jury's arrays one by one.

Then input for each array goes. Firstly, your program has to read the number nn ( 1<=n<=501<=n<=50 ) — the length of the array. It will be provided in the next line of the input.

Further, your program can perform comparisons or report that the answer is found.

  • To perform a comparison, you have to output string of the following pattern «? i j» ( ii and jj must be integer numbers from 11 to nn ) — the indices of the elements to compare in the current query.
  • To report the indices of minimal and maximal elements of the hidden array, your program have to output a line in the form «! i j» ( ii and jj must be integer numbers from 11 to nn ), where ii is an index of the minimal element of array, and jj is an index of the maximal element of the array. If there are several possible answers to the problem, you can output any of them.

There are several possible responses for a comparison:

  • '<' — if aia_{i} is less than aja_{j} ,
  • '=' — if aia_{i} is equal to aja_{j} ,
  • '>' — if aia_{i} is greater than aja_{j} .

For an array of length nn your program can make at most comparisons. Note that the operation of reporting an answer («! i j» ) is not included into the value of f(n)f(n) .

After the answer is reported, your program has to solve the problem for the next array or it should terminate if all TT arrays are processed.

输入输出样例

  • 输入#1

    2
    2
     
    &gt;
     
    3
     
    =
     
    =
     

    输出#1

     
     
    ? 1 2
     
    ! 2 1
     
    ? 3 1
     
    ? 2 1
     
    ! 2 3
首页