아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

최고의 학생

시간 제한1.2초메모리 제한1024 MB

요약
학생 번호 배열에서 각 구간마다 가장 많이 등장한 번호를 출력하되, 동률이면 가장 큰 번호를 출력한다.
난이도

어려움10점 중 8점

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

문제

SY 학교는 매일 최고의 학생을 한 명 선정한다. nn일 동안의 최고의 학생 목록이 주어졌을 때, 학교는 SS일부터 EE일까지의 기간 [S,E][S, E] 동안 최고의 학생으로 가장 많이 선정된 학생이 누구인지 알고 싶어 한다. 학교는 그 학생에게 상을 줄 계획이다.

nn일 연속의 최고의 학생 목록과 qq개의 질의 {(S1,E1),…,(Sq,Eq)}\{(S_1, E_1), \dots, (S_q, E_q)\}가 주어질 때, 각 질의 (Si,Ei)(S_i, E_i)에 대해 기간 [Si,Ei][S_i, E_i] 동안 가장 많이 선정된 최고의 학생을 구하는 프로그램을 작성하시오.

입력

입력은 표준 입력에서 읽는다. 입력의 첫 줄에는 두 정수 nn과 qq가 주어지며, 각각 날짜의 수와 질의의 수를 나타낸다. 여기서 1≤n≤100,0001 \le n \le 100,000이고 1≤q≤100,0001 \le q \le 100,000이다. 학생들은 11부터 10910^9 사이의 서로 다른 id 번호를 가진다. 다음 줄에는 nn개의 양의 정수가 주어지며, 11일부터 nn일까지 순서대로 최고의 학생의 id 번호 nn개를 나타낸다. 이어지는 qq개의 각 줄에는 두 양의 정수 SiS_i와 EiE_i가 주어지며, 질의 (Si,Ei)(S_i, E_i)를 나타낸다. 여기서 [Si,Ei][S_i, E_i]는 SiS_i일부터 EiE_i일까지의 기간이다. i=1,…,qi = 1, \dots, q에 대해 1≤Si≤Ei≤n1 \le S_i \le E_i \le n이다.

출력

출력은 표준 출력에 쓴다. 정확히 qq줄을 출력한다. ii번째 줄에는 ii번째 기간 [Si,Ei][S_i, E_i] 동안 최고의 학생으로 가장 많이 선정된 학생의 id 번호를 출력한다. 그러한 학생이 둘 이상이면, 그중 id 번호가 가장 큰 학생을 출력한다.

예제2

  1. 예제 1

    입력
    5 3
    2 1 2 1 1
    1 2
    1 4
    1 5
    
    예상 출력
    2
    2
    1
    
  2. 예제 2

    입력
    6 3
    3 8 3 2 5 2
    1 6
    2 4
    4 6
    
    예상 출력
    3
    8
    2