1. 程式人生 > 其它 >2021.10.1 QBXT

2021.10.1 QBXT

沒有摘要的摘要

10.1

目錄

補題

得分情況

100 + 0 + 40 + 15 = 155


T1 3631: elective

看一下資料範圍可以發現 \(O(2^n)\) 可過

直接列舉所有課的選擇狀態 概率大於一半的取最大值就好了


程式碼


T2 3632: seq

每一位是獨立的 把操作拆到每一位上

如果算出的利用 \(C\) 能弄出那些陣列 記為 \(tot\) 直接計算 \(\sum tot * C\)

考慮 \(k = 0\)

的情況 只能對一個區間異或 \(0\) 或者 \(1\)

對序列進行差分 將區間異或消成單點

將一個操作變成 \(l\)\(r + 1\) 的邊 把所有邊弄出來 不同連通塊之間不會相互影響 對每個連通塊進行考慮

考慮一個連通塊的任意一棵生成樹 設有 \(n\) 個節點 考慮這棵樹有多少種方案 每次操作異或兩個節點 所以樹上 \(1\) 的個數一定是偶數 對一個連通塊 考慮每條邊是否操作 最多隻有 \(2^{n - 1}\) 種方案 用一個點的父親控制這個點的值是 \(0\) 還是 \(1\) 可以保證用操作將除了根以外的所有點弄成需要的顏色 而根的位置的顏色無法通過父節點改變 所以最少有 \(2^{n - 1}\)

中方案

其實意會一下就是 \(2^{n - 1}\) 種方案

即一個連通塊恰好有 \(2^{n - 1}\) 中方案 相當於 \(\frac {2^n}2\)

統計連通塊個數 記為 \(cnt\) 意會一下答案就是 \(\frac {2^n}{2^{cnt}}\)


程式碼木有寫出來


T3 3633: tree

標程線段樹合併

但是點分和樹啟發都能過

對於 \(|i - j| \leq dis_{i, j}\) 有兩種情況

即:

\[i - j \leq dis_{i, j} \]

\[j - i \leq dis_{i, j} \]

對應到點分治過程中的距離 式子大概能化一下:

\[i - j \leq dep_i + dep_j \]

\[j - i \leq dep_i + dep_j \]

同變數化到一邊

\[dep_i + i \leq j - dep_j \]\[dep_i - i \leq - j - dep_j \]

維護兩個樹狀陣列 可以將查詢優化到 \(\log\) 級別 大概就能過了


程式碼


T4 3634: graph

三十分做法

顯然沒有什麼好說的

法一

構造圖

大概這個樣子 將上面那個點與從左往右連第 \(i\) 個點相連就可以為這張圖增加 \(2^{i - 1}\) 棵生成樹 然後直接做


程式碼


法二

曾想聽懂

但是結果可想而知


知識點

  • 根號資料結構

  • 根號分治

  • 根號重構

  • 分塊

  • 回滾莫隊

  • 三元環計數

  • 線段樹分治

  • 線段樹合併

  • 啟發式合併


資料結構

線段樹

bzoj 4239

按照長高的順序排序 維護每個位置最後一次收割時間 每次割草的時候 線段樹上二分並打標記

草的單調性不會變 長得高的永遠高 割了也是割成一樣的


loj 6029

維護區間的最大值和最小值 當 \(\max - \max / w = min - min / w\) 打標記為區間減 如果不相等 每個最大值減去最小值的差至少會 \(/2\)

均攤複雜度兩隻 \(\log\)


CF576E

考慮離線怎麼動態的判定一張圖加上一條邊之後是否是二分圖 線段樹分治 插入的時候用並查集維護顏色 複雜度兩隻 \(\log\)

但是不知道每次操作是否執行 直接離線有問題

預設每次操作都執行 假定確定了每條邊的起始與結束

對於正常的線段樹分治 即知道加那些邊 假定某個位置有一個改變邊的顏色的操作 不清楚顏色 但是知道操作區間 根據是否操作可以判斷這個區間的顏色 在插入的時候幹一些奇怪的事情 不標記顏色 在 \(dfs\) 一次處理的時候 在對不確定顏色的位置標記顏色 從左到右進行 不會出現未標記顏色的邊的出現區間 之後正常的線段樹分治


掃描線 單調棧

bzoj 2383

從左到右 維護一個 \(r\) 的單調遞減的棧 與下一個氣球相交的氣球具有單調性 具體看課件

棄療++


bzoj 5259

典中典

連續段的性質: \(r - l + 1 = \max - \min + 1\)

有個 \(r - l + 1 \leq \max - \min + 1\)

\(\max - \min + l - r \geq 0\)

計算上面那個東西等於零的個數

維護字尾的 \(\min\) 和 字尾的 \(\max\)

\(r\) 掃描線列舉 \(l\) 初始化

棄療++


綠菇領主


連續段的性質 ???


loj 3153

僅考慮 \(a\)\(b\)\(a\)\(b\) 一定是區間最大和次大 考慮維護這個東西

對右端點做掃描線 如果左端點是最大值 一定在單調棧上

棄療++


樹上資料結構

bzoj 4127

維護區間負數的最大值 區間正數的和 區間負數的和 區間正數個數 負數個數

區間加的時候對於負數特殊考慮 如果由負數變成正數就直接遞迴到底 否則打標記


bzoj 3626

首先差分 \(lca\) 的深度轉換為點的個數 相當於求兩點到根的路徑的並


bzoj 4241

回滾莫隊板子


apio2019 橋樑

離線 在詢問的時間軸上分塊 按照根號個修改分塊 維護帶撤銷的並查集 用棧維護並查集 每根號個一次

沒有修改 按照承重依次加入

將橋樑按照承重一次加入 維護根號個修改的情況 每根號個修改維護一個狀態

維護每個時間點的時候 ... 難以描述

注意一下怎麼沒有加或者沒有減


CF896E

分塊

每個塊開桶 連結串列維護這個值的所有位置 散塊直接重構 整塊的減少 最大值 \(\geq 2 \times x\) 將小於等於 \(x\) 的扔到後面 反之將 \(>x\) 的扔到前面

每次歸併複雜度塊內最大值的減少量 總複雜度 \(O(\sqrt n (V + m))\)


某題目

給一個 \(n \times m\) 的矩陣 \(A\) 和一個 \(n\) 的陣列 \(a_i\) 滿足 \(A_{i, 0} = a_i, A_{i, j} = A_{i - 1, j} + A_{i, j - 1}\) 單點修改 \(A_{i, j}\) 或者詢問一個 \(A_{i, j}\) 的位置
\(n \leq 10^5, m \leq 20, q \leq 10^5\)

根號重構 每根號次操作重構一下 預處理根號次操作中的修改位置

棄療++


數三元環

\(10^5\) 的無向圖 數有幾個三元環

將點按照 \(\sqrt n\) 分組 考慮列舉兩個點的出邊 如果一個點的出邊是小於根號的 直接枚舉出邊 如果三個點都是大點 大點只有根號個

..

列舉小點的出邊 列舉大點???

..

按照度數排序 分為大點和小點

如果三個點都是小點 直接暴力列舉

考慮有大點的情況

一個大點 兩個小點

小點列舉邊 再列舉大點

一個小點 兩個大點

對於每個大點 列舉一個小點 再列舉一個大點

三個大點 暴力列舉

棄療++

給邊定向 原來的三元環有兩種情況

加入每條邊的時候定向 由小的點指向大的點 每個點的出度不會超過根號


gym 102331F


loj2461


三元環計數

咕~