CF1140F Расширение множества точек [по времени раздела, непересекающиеся посаженные]

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

Во-первых, мы считаем отсутствие операции вывода, следует рассматривать в качестве каждой строки и каждого столбца в точке (так называемый белая точка представляет собой строку, от имени столбцов называют черные пятна), каждая точка Ф (х, у) $ рассматривается как ребро.

Расширение операции на самом деле $ x_1 $ строк и $ y_1, y_2 колонке $ Unicom, когда $ x_2 $ строки и столбцы $ $ y_1 Unicom, линия также $ x_2 $ $ $ y_2 строка с China Unicom.

Unicom в том же блоке черной точки и белой точки будет производить вклад, так что даже стороны операций запроса + (количество черных точек * точка белого номер) каждый блок линии связи может быть использован непересекающимся-набор техническое обслуживание.

Теперь рассмотреть вопрос о снятии операции, на самом деле, эквивалент каждого ребра в $ [Т_1, t_2] $ на этот раз, «вклад» рассмотреть построение дерева линии о времени, $ [t_1, t_2] $ сплит журнал интервалы, а затем соединить эти грани, соответствующие краям интервалы войти концентрации в пределах этого диапазона указывает интервал этого края «вклад».

Затем, когда дерево ДФС сегмента, ДФС каждый интервал времени до $ [L, R] $ будет установить боковые грани, соответствующие секции добавляется непересекающиеся-набор, чтобы исключить время воздействия для выхода.

В самом деле, для большинства не-Амортизируемых структур времени данных быстро отозваны, не пересекается набор, а также. Вы не можете использовать сжатие пути, чтобы использовать слияние ранга.

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

1 #include <. Бит / STDC ++ H>
 2  #define Ринт регистре INT
 3  #define фи первый
 4  #define себе второй
 5  #define т.пл make_pair
 6 с  использованием  пространства имен STD;
7 ЬурейеЕ длинные  длинные Л.Л.;
8 ЬурейиЙ пар < INT , INT > PII;
9  Const  INT N = 600003 ;
10  INT кв, фа [N], Siz [N] , [ 2 ], сверху;
11 Карта <PII, INT >ма;
12 вектор <PII> VEC [Н << 2 ];
13  МР ANS, ansx [N];
14 инлайн INT getfa ( INT х) {
 15      возврата х == фа [х]? х: getfa (фа [х]);
16  }
 17  PII дие [N];
18 инлайн недействительными гребенчатый ( INT х, INT у) {
 19      х = getfa (х); у = getfa (у);
20 ,      если (х == у) возврата ;
21 ,      если (Siz [х] [ 0 ] + Siz [х] [ 1 ] <Siz [у] [ 0] + [Y] , [ 1 ]) подкачки (х, у);
22      ANS + = (LL) [х] [ 0 ] * [Y] [ 1 ] + (МР) [х] [ 1 ] * [у] [ 0 ];
23      [х] [ 0 ] + [Y] = [ 0 ];
24      [х] [ 1 ] + [Y] = [ 1 ];
25      только [Y] = х;
26      дие [++] = тр (х, у);
28, 27  }
 инлайн недействительными отмены ( INT х, INT у) {
 29      только [у] = у;
30     вы [х] [ 0 ] - = вы [у] [ 0 ];
31      вы [х] [ 1 ] - = вы [у] [ 1 ];
32      ANS - = (LL) вы [х] [ 0 ] * вы [у] [ 1 ] + (LL) вы [х] [ 1 ] * вы [у] [ 0 ];
33  }
 34 инлайн недействительным обновление ( INT х, INT L INT R, INT л, INT г, PII вал) {
 35 ,      если (л <= L && R <= г) {
 36          Vec [х] Pushback (доска) ;
37          возвращение;
38      }
 39      INT середины = L + R >> 1 ;
40 ,      если (л <= середина) обновление (х << 1 , L, середина, L, R, вал);
41 ,      если (середина <г) обновление (х << 1 | 1 , середина + 1 , R, L, R, вал);
42  }
 43 встроенных пустот в глубину ( INT х, INT L, INT R) {
 44      INT Теперь = сверху;
45      для (PII TMP: VEC [х])
 46          гребенки (tmp.fi, tmp.se);
47 ,      если(L == R) ansx [L] = анс;
48      еще {
 49          ИНТ середине = L + R >> 1 ;
50          ДФС (х << 1 , L, середина); ДФС (х << 1 | 1 , середина + 1 , R);
51      }
 52 в      то время как (сверху> сейчас) {
 53          отменить (дие [наверх] .fi, дие [наверх] .se); - сверху;
54      }
 55  }
 56  INT основных () {
 57      зсапЕ ( " % d " , & д);
58      для (Ринт я =1 ; я <= д; я ++ ) {
 59          INT х, у;
60          зсапЕ ( " % d% d " , & х, & у); у + = 3e5;
61 ,          если ма [тр (х, у)] = (ma.count (тр (х, у))!) Я;
62          еще {
 63              обновление ( 1 , 1 , кв, ма [тр (х, у)], I - 1 , тр (х, у));
64              ma.erase (тр (х, у));
65          }
 66      }
 67      для (авто он = ma.begin (); это = ma.end (!), Это ++ )
 68          обновления ( 1 ,1 , д, это -> се, д, это -> фи);
69      для (Rint I = 1 ; я <= 3e5; я ++) фа [I] = I, SIZ [I] [ 0 ] = 1 ;
70      для (Ринт я = 3e5 + 1 ; г <= 6e5; я ++) фа [I] = я, Siz [I] [ 1 ] = 1 ;
71      ДФС ( 1 , 1 , кв);
72      для (Rint I = 1 ; я <= д; я ++) Е ( " % LLD \ п " , ansx [I]);
73 }
CF1140F

 

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

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