CF1000F Один Происшествие Председатель дерева дерево линии

Значение вопросов:

Принимая во внимание длину п последовательности, т запрос, задавая каждый раз , когда заданный интервал [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 ; 
}
Просмотр кода

 

рекомендация

отwww.cnblogs.com/bxd123/p/11697536.html