CF1168C И достижимости [структура, дп]

Тема ссылка: Л Гу

Описание Название: $ заданное число 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 }
CF1168C

 

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

отwww.cnblogs.com/AThousandMoons/p/11116726.html