CF1187D подмассив Сортировка (сегмент дерева)

Если честно, $ 2200 до $ заголовка не может сделать немного унизительно ......

Конечно, первое предложение все появляется такое же число раз.

Первая секция сортировки соответствует числу переключения двух смежных, в передней части числа, чтобы быть больше, чем число переключения обратно.

Тогда не будет ......

Мы считаем $ b_1 $ до $ b_ {я-1} $, были самонаводящиеся, а теперь хотят $ b_i $ самонаведения.

Найти свою позицию в $ A $ появляясь в следующем (до $ P $). Было установлено, что только тогда, когда $ A_P $ является $ a_i $ до $ A_p $ минимальное время, чтобы пойти.

Это не изменит положение $ A $ конкретного кода для достижения, как определить минимальное значение его? Было установлено, что номер был самонаведения на минимальный взнос не будет самонаведения после стать INF. Затем спросите $ 1 $ до $ P $ до минимума.

Временная сложность $ O (п \ п лог) $.

# include <бит / STDC ++ ч.>
 с использованием  пространства имен STD; 
ЬурейеЕ долго  долго LL;
Const  INT maxn = 300030 ;
#define lson о << 1, л, средний
 #define rson о << 1 | 1, середина + 1, г
 #define ДЛЯ (я, а, б) для (INT I = (а); г <= (б ); я ++)
 #define ROF (я, а, б) для (INT I = (а); I> = (б); я--)
 #define MEM (х, у) MemSet (X, V, SizeOf ( х)) 
рядный INT чтения () {
     INT х = 0 , е = 0 ; символ ч = GetChar ();
    в то время как (ч < ' 0 '|| ч> ' 9 ' ) П | = ч == ' - ' , ч = GetChar ();
    в то время как (ч> = ' 0 ' && ч <= ' 9 ' ) х = х * 10 + CH- ' 0 ' , ч = GetChar ();
    вернуться п - х: х; 
} 
INT т, п, а [maxn], б [maxn], та [maxn], Т.Б. [maxn], млн [maxn * 4 ], LEN [maxn]; 
вектор < INT > в [maxn];1 ], млн [о << 1 | 1 ]); 
} 
Недействительными сборки ( INT о, INT л, INT г) {
     если (л == г) возвращение  недействительными (млн [O] = а [L]);
    Int середине = (L + R) >> 1 ; 
    построить (lson); построить (rson); 
    Pushup (о); 
} 
Недействительным обновление ( INT о, INT л, INT г, INT р, INT v) {
     если (л == г) возвращение  недействительными (млн [O] = v);
    ИНТсередина = (L + R) >> 1 ;
    если (середина> = р) обновление (lson, р, v);
    остальное обновление (rson, р, v); 
    Pushup (о); 
} 
INT запроса ( INT о, INT л, INT г, INT QL, INT QR) {
     если (л> = QL && г <= дг) возвращение млн [о];
    Int середине = (L + R) >> 1 , ANS = 2E9;
    если (середина> = QL) ANS = мин (ANS, запрос (lson, QL, Qr));
    если (середина <дг) ANS = мин (ANS, запрос (rson, QL, Qr));
    вернуться анс; 
} 
ИНТОсновной () { 
    т = следующим образом ();
    в то время как (T-- ) {
         BOOL флаг = верно ; 
        п = следующим образом (); 
        ЗА (I, 1 , п) та [I] = A [I] = READ (), на [а [I]] push_back (I).; 
        ЗА (I, 1 , п) туберкулез [I] = Ь [I] = следующим образом (); 
        сортировки (тот + 1 , тот + п + 1 ); род (ТБ + 1 , Т.Б. + п + 1 ); 
        ЗА (I, 1 , п) , если (та [I] = Т.Б. [я]!) {(Пут " НЕТ " ), флаг = ложь ; перерыв;}
         Если (! Флаг) { 
            ЗА (я, 1 , п) при [I] .clear (), длина [I] = 0 ;
            продолжить ; 
        } 
        Построить ( 1 , 1 , N); 
        ЗА (I, 1 , п) {
             INT р = у [Ь [I]] [Len [Ь [I]] ++ ];
            если (запрос ( 1 , 1 , п, 1 !, р) = B [I]) {пут ( " НЕТ " ), флаг = ложь ; перерыв ;} 
            обновление ( 1 , 1 , N, P, 2E9);
        }
        если (флаг) ставит ( " ДА " ); 
        ЗА (I, 1 , п) в [I] .clear (), длина [I] = 0 ; 
    } 
}
Просмотр кода

 

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

отwww.cnblogs.com/1000Suns/p/11126018.html