Значение вопросов:
Принимая во внимание длину п последовательности, т запрос, задавая каждый раз , когда заданный интервал [L, R & л] , если существует диапазон числа появляется только один раз, выводит номер (если какой - либо из множества выходов), нет выхода 0, н-, т <= 10. 5 ^. 5 *
Решение:
- Рассмотрим каждый интервал запроса, чтобы сохранить положение на фигурах, появляющихся на положении, которое появляется, если меньше, чем л только число в диапазоне, то, что
- Однако, если есть два одинаковых секции могут быть цифровые номера на левой стороне ряда меньше, чем л так, чтобы исключить влияние
- До тех пор, как вы поддерживаете позицию каждого числа на правой цифре числа, которое, как представляется, председатель дерева может быть использован в Интернете, чтобы сохранить префикс и дерева с деревом линии или офф-лайн
# include <бит / STDC ++ ч.> с использованием пространства имен STD; #define LL долго долго Const INT N = 5e5 + 10 ; структура узла { INT Minn, Num;} т [Н << 6 ]; слияния узел (узел а, узел б) { если (a.minn <b.minn) возвращение (узел) {a.minn, a.num}; то возврат (узел) {b.minn, b.num}; } INT lson [N << 6 ], rson [N << 6 ], п, т, последняя [N], пос [N], а [N], Т [Н], ncnt; недействительными сборки ( INT л, INT г, INT &поз) { пос = ++ ncnt; если (л == г) {т [поз] = (узел) { 1000000000 , 0 }; возвращать ;} INT т = (L + R) >> 1 ; построить (л, м, lson [позы]); построить (м + 1 , г, rson [позы]); т [позы] = слияния (T [lson [позы]], T [rson [позы]]); } Недействительного upnode ( INT х, INT v, INT Num, INT л, INT г, INT предварительно, INT & позы) { поз = ++ncnt; lson [поз] = lson [предварительно]; rson [поз] = rson [предварительно]; T [поз] = т [предварительно]; если (л == г) {т [поз] = (узел) {v, число}; возвращать ;} INT т = (L + R) >> 1 ; если (х <= м) upnode (х, у, Num, л, м, lson [предварительно], lson [поз]); остальное upnode (х, у, Num, т + 1 , г, rson [предварительно], rson [поз]); т [позы] = слияния (T [lson [позы]], T [rson [позы]]); } Узла Qmin ( INT L, INT R, INT л, INT г, INT поз) { если (L <= L && г <= R) , возвращение т [поз]; Узел ANS = (узел) { 100000000 , 0 }; INT т = (L + R) >> 1 ; если (L <= м) ANS = слияние (ANS, Qmin (L, R, L, M, lson [позы])); если (R> м) ANS = слияние (ANS, Qmin (L, R, M + 1 , г, rson [поз])); вернуться анс; } INT основных () { CIN >> п; узел ANS; для ( INT I = 1 ; г <= п; я ++) зсапЕ ( " % d " , & [I]); для(Int я = 1 ; г <= п; я ++ ) { последние [I] = позы [а [I]]; поз [а [я]] = I; } Построить ( 1 , N, T [ 0 ]); для ( INT I = 1 ; г <= п; я ++ ) { T [I] = T [i - 1 ]; upnode (я, наконец [I], а [I], 1 , п, Т [I], Т [I]); если (последний [я]) { upnode (последний [I], 100000000 , 0 , 1, п, Т [I], Т [I]); } } CIN >> м; INT L, R; в то время как (m-- ) { зсапЕ ( " % d% d " , & л, & г); ANS = Qmin (л, г, 1 , п, Т [г]); если (ans.minn <л) Е ( " % d \ п " , ans.num); еще Е ( " 0 \ п " ); } Возвращает 0 ; }