Тема ссылка: Л Гу
Описание Название: $ заданное число n- $ $ $ a_i, если $ я <J $ и $ a_i и a_j> 0 $, то $ $ $ I $ J связан с одной стороны, $ Q $ раз спрашивать спрашивает от $ L $, если она может начать достичь $ R $.
Диапазон данных: $ п, д \ Leq 3 * 10 ^ 5 $
Изумительные и думающие проблемы. (Ниже приведены двоичный)
Поддерживать два массива, $ G_ {I, J} $ составляет менее $ I $ нижний индекс нижний индекс максимальное число и первый $ J битный индекс $ 1. $ F_ {I, J} $ составляют менее $ I $ нижнего индекса нижнего индекса является максимальным числом, первый бит равен 1 $ J $ $ I $ и может достигать индекс.
$ G_ {I, J} $ предварительной обработки Излишне говорить, что $ F_ {I, J} $ $ K $ можно перечислить предварительную обработку, показывая a_i $ $ $ K $ на второй бит от $ G_ {I, K} $ достигают с $ g_ {I, K} F быть введены непосредственно значение $ $ I $ диафрагменного числа.
На вопрос, перечисление $ I $, $ составляет от R & Lt $ $ F_ {г, я} $ прибывает, и когда первый бит $ I $ $ $ A_L 1 и $ F_ {г, г} \ когда GEQ л $ $ L $ до $ F_ {г, я} $, она может достигать $ L $ $ R $. Если он не будет работать для каждого выходного Fou.
Временная сложность $ O (п \ ^ войти 2n + д \ п лог) $
1 #include <. Бит / STDC ++ H> 2 #define Ринт регистр INT 3 с использованием пространства имен STD; 4 Const INT N = 300001 ; 5 INT п, т, е [N] , [ 19 ], г [N] , [ 19 ]; 6 BOOL а [N] , [ 19 ]; 7 INT основных () { 8 зсапЕ ( " % d% d " , & п, & м); 9 для (Ринт я = 1 ; г <= п; я ++ ) { 10 Int х; 11 зсапЕ ( " % d " , & х); 12 для (Ринт J = 0 ; J < 19 ; j ++ ) 13 , если (х & ( 1 << к)) а [I] [J] = 1 ; 14 } 15 для (Ринт я = 1 ; г <= п; я ++ ) 16 для (Ринт J = 0 ; J < 19 ; j ++ ) 17 , если (A [I - 1 ] [J]) [г я] [J] = я - 1 ; 18 еще г [я] [J] = г [г - 1 ] [J]; 19 для (Ринт я = 1 ; г <= п; я ++ ) 20 для (Ринт J = 0 ; J < 19 ; j ++ ) 21 для (Ринт к = 0 ; к < 19 ; K ++ ) 22 если (а [я] [K]) { 23 INT х = г [г] [к]; 24 F [I] [J] = макс (F [I] [J], F [х] [J]); 25 , если (а [х] [J]) П [I] [J] = макс (F [I] [J], х); 26 } 27 , а (м - ) { 28 INT L, R; 29 BOOL ANS = ложь ; 30 зсапЕ ( " % d% d " , & л, & г); 31 для (Ринт я = 0 ; г < 19 && ANS;! Я ++ ) 32 , если (а [л] [I] && е [г] [г]> = л) ANS = истинная ; 33 ставит (ANS? " Ши " : " Фоу " ); 34 } 35 }