두 번째로 큰 수

시간 제한15초메모리 제한2048 MB

요약
숨겨진 순열에서 각 구간의 두 번째로 큰 값의 위치를 최대 150,000번의 비교만으로 찾아야 하며, 쿼리는 온라인으로 주어진다.
난이도

어려움10점 중 8점

유형
분할 정복, 세그먼트 트리, 이분 탐색, 구현
정답자
아직 제출이 없습니다

문제

이 문제는 인터랙티브 문제입니다.

숨겨진 길이 NN의 순열 AA가 있다. 순열 AA에서 다음과 같은 쿼리를 QQ회 처리하라.

  • ll rr: 부분 수열 A_l,A_l+1,…,A_rA\_l, A\_{l+1}, \ldots, A\_r에서 두 번째로 큰 수의 위치를 출력한다.

건모는 자신이 세상에서 알고리즘을 가장 잘한다고 생각한다. 건모는 이 문제쯤은 두 수를 최대 150,000150\\,000회 비교하는 것 만으로 해결 할 수 있다. 당신이 건모가 되어 문제를 해결해보자.

쿼리를 처리하기 위해, 당신은 채점 시스템에게 다음과 같은 연산을 최대 150,000150\\,000회 할 수 있다.

  • ? ii jj: A_iA\_i와 A_jA\_j의 대소를 비교한다.

입력

첫째 줄에 NN과 QQ가 공백으로 구분되어 주어진다. (2≤N,Q≤50,0002 \leq N, Q \leq 50\\,000)

둘째 줄에 첫 번째 쿼리 ll rr이 공백으로 구분되어 주어진다. (1≤l<r≤N1 \le l < r \le N)

쿼리는 온라인이다. 즉 현재 쿼리를 답하기 전까지 다음 쿼리가 주어지지 않는다.

이후 채점 시스템과의 인터랙션이 시작된다.

예제1

  1. 예제 1

    입력
    5 2
    1 3
    
    >
    
    >
    
    2 5
    
    <
    
    
    예상 출력
    
    
    ? 2 3
    
    ? 3 1
    
    ! 3
    
    ? 5 4
    
    ! 4