Жизнь программистов

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

요약
길이 n인 순열을 k개의 연속한 블록으로 나누어 각 블록 최댓값으로 이루어진 수열을 사전순으로 최소화하고, i번째 값을 묻는 q개의 질의에 답한다.
난이도

어려움10점 중 9점

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

문제

Новый сериал про жизнь программистов содержит nn серий, пронумерованных от 11 до nn. Телекомпания Сириус ТВ планирует показывать серии по очереди от первой до последней в течение kk дней, каждый день показывая блок из одной или нескольких подряд идущих серий. Каждая серия будет показана ровно один раз.

По результатам тестовых просмотров маркетологи компании составили рейтинг серий: ii-й серии сопоставлено число a_ia\_i от 11 до nn, самая интересная серия получила рейтинг 11, а самая скучная --- рейтинг nn. Рейтинги различных серий различны, поэтому числа \[a_1,a_2,…,a_n]\[a\_1, a\_2, \ldots, a\_n] образуют перестановку.

Пусть принято решение о том, в какой день какие серии будут показаны. Для каждого дня определим рейтинг этого дня, равный рейтингу самой скучной серии этого дня. Иначе говоря, пусть в jj-й день показываются серии с l_jl\_j по r_jr\_j, тогда рейтинг этого дня b_jb\_j равен максимальному значению среди \[a_l_j,a_l_j+1,…,a_r_j]\[a\_{l\_j}, a\_{l\_j+1}, \ldots, a\_{r\_j}].

Чтобы показ сериала был удачным, необходимо вовлечь зрителей в просмотр. Среди всех возможных способов разбить серии на kk блоков по дням необходимо выбрать тот, в котором рейтинг первого дня как можно лучше: b_1b\_1 минимально. Среди этих способов в свою очередь необходимо минимизировать рейтинг второго дня b_2b\_2, при выбранных значениях b_1b\_1 и b_2b\_2 --- минимизировать b_3b\_3, и так далее. Таким образом, необходимо разбить показ серий на kk блоков таким образом, чтобы лексикографически минимизировать последовательность \[b_1,b_2,…,b_k]\[b\_1, b\_2, \ldots, b\_k].

Вам необходимо ответить на qq запросов, каждый из которых задаётся двумя числами: kk и ii. В качестве ответа на запрос необходимо вывести значение b_ib\_i --- рейтинг ii-го дня для оптимального способа показать сериал за kk дней.

입력

В первой строке входных данных содержится два целых числа nn и qq (1≤n,q≤300,0001 \le n, q \le 300\\,000) --- количество серий и количество запросов соответственно.

Во второй строке входных данных содержатся nn целых чисел a_1,a_2,…,a_na\_1, a\_2, \ldots, a\_n (1≤a_i≤n1 \le a\_i \le n) --- рейтинги серий. Гарантируется, что массив aa является перестановкой целых чисел от 11 до nn.

Следующие qq строк содержат по два целых числа kk и ii (1≤i≤k≤n1 \le i \le k \le n) --- параметры очередного запроса.

출력

В qq строках выведите ответ на каждый запрос, в том порядке, в котором они даны во входных данных.

힌트

Рассмотрим первый тест:

  • При k=7k = 7 существует единственный способ показа: каждый день показывать по одной серии. Рейтинги серий по дням получаются \[6],\[4],\[2],\[3],\[1],\[7],\[5]\[6], \[4], \[2], \[3], \[1], \[7], \[5], откуда b=\[6,4,2,3,1,7,5]b = \[6, 4, 2, 3, 1, 7, 5], поэтому ответ на запрос k=7k = 7 и i=4i = 4 равен b_4=3b\_4 = 3.
  • При k=1k = 1 существует единственный способ показа: показать все серии в первый день. Рейтинги серий по дням: \[6,4,2,3,1,7,5]\[6, 4, 2, 3, 1, 7, 5], откуда b=\[7]b = \[7], поэтому ответ на запрос k=1k = 1 и i=1i = 1 равен b_1=7b\_1=7.
  • При k=4k = 4 оптимально в первый день показать четыре серии, а затем три дня показывать по одной серии. Рейтинги серий по дням: \[6,4,2,3],\[1],\[7],\[5]\[6, 4, 2, 3], \[1], \[7], \[5], откуда b=\[6,1,7,5]b = \[6, 1, 7, 5], поэтому ответ на запрос k=4k = 4 и i=2i = 2 равен b_2=1b\_2=1.
  • При k=5k = 5 оптимально в первый и последний день показать по две серии, а в остальные дни по одной. Рейтинги серий по дням: \[6,4],\[2],\[3],\[1],\[7,5]\[6, 4], \[2], \[3], \[1], \[7, 5], откуда b=\[6,2,3,1,7]b = \[6, 2, 3, 1, 7], поэтому ответ на запрос k=5k = 5 и i=3i = 3 равен b_3=3b\_3=3.

예제2

  1. 예제 1

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

    입력
    3 1
    2 3 1
    2 2
    
    예상 출력
    3