heheda練資料結構

2021-07-07 08:26:42 字數 2283 閱讀 9083

聯賽結束,自己的碼力已經下降了不知多少個檔次,再加上最近空閒時間比較多,我就開啟了這個可以說最費時間的專題。

//話說我未完成的數論專題還會繼續的。

最近看了以下知識點:

線段樹套線段樹

線段樹套平衡樹

準備學習:

替罪羊樹

塊狀鍊錶

複習:樹鏈剖分

樹狀陣列套線段樹

一些高階的線段樹

可持久化tire

可並堆bzoj 2957 樓房重建

給定第一象限的n個樓房,詢問從原點能看到多少個樓房,支援修改樓房高度。

線段樹維護每個點的斜率。

每個節點記錄這個區間中最大的斜率,選取的個數。

修改乙個點的斜率,它左面的答案是沒有影響的。

對於右面,如果乙個區間最大的斜率小於上乙個的斜率,那麼它的貢獻為0.

否則,如果左區間最大值大於上乙個的斜率,那麼右區間答案不變,遞迴修改左子樹。

如果小於,左區間貢獻為0,遞迴修改右子樹。

總時間複雜度nlog^2n 但是實際遠遠達不到。

注意:1、右區間對當前區間的貢獻不等於右區間的答案。

2、在某種情況下,double 型別的兩個數是可能相等的。

bzoj 2741 l

分析:區間是第一維資料結構,異或和最大是可持久化tire做一維資料結構。

於是,用分塊維護區間答案,利用可持久化tire維護頭尾答案。

預處理出每兩塊做左右邊界的答案,暴力查詢以最左面塊的每個點開始的答案和以最右面塊的每個點結束的答案。

bzoj 3130 k大數查詢

有n個位置,m個操作。操作有兩種,每次操作如果是1 a b c的形式表示在第a個位置到第b個位置,每個位置加入乙個數c

如果是2 a b c形式,表示詢問從第a個位置到第b個位置,第c大的數是多少。

注意這不是帶插入區間k大值。

學cdq的時候用一種神奇的樹狀陣列水過。線段樹套線段樹的第一維不支援標記,但是第二維支援。第一維權值,第二維位置,生寫即可。

第一次寫下放標記的動態開點線段樹,大約就是release的時候把左右兒子都建出來。

話說學cdq的時候把題刷了個遍,現在幾乎找不到樹套樹沒寫過的題了。

bzoj 3196 二逼平衡樹

線段樹套平衡樹的各項操作。每個線段樹的節點是這個區間的平衡樹。

第一維區間,第二維權值。

注意一開始把樹建出來,而不是乙個個插入。要不就卡常數了。

注意兩個點權值相等的情況

bzoj 2333 棘手的操作

挖坑。話說堆就是維護最大值的,我還維護乙個變數幹什麼?

調了n天的**,還是貼一下吧。

#include#include#include#include#include#include#define ll long long

#define inf 1e9

#define eps 1e-10

#define md

#define n 300010

using namespace std;

int ad[n],ch[n][2],val[n],dis[n],fa[n],q[n],father[n];

multisetst;

int all;

int findfa(int x)

void release(int x)

if (r)

ad[x]=0; }}

void update(int x)

{ //mx[x]=val[x];

//if (ch[x][0]) mx[x]=max(mx[x],mx[ch[x][0]]);

//if (ch[x][1]) mx[x]=max(mx[x],mx[ch[x][1]]);

if (dis[ch[x][0]]

bzoj 4009 接水果

挖坑。bzoj 4336 騎士的旅行

挖坑,已經嘗試了權值線段樹套平衡樹和線段數套線段樹,都過不了,改天有心情寫乙個常數20的線段樹,或許能過?

11.28更

這個周主要做了各個資料結構的一些裸題。

bzoj 1146 騎士的旅行 線段樹套平衡樹+樹鏈剖分+線段樹上二分。

bzoj 2733 永無鄉

開始想要 splay+啟發式合併,感覺有點虛,就看了hzwer的線段樹合併,感覺好扯,但是,細想想,複雜度是***的。

需要merge的線段樹節點一定是兩顆線段樹共有的,那麼一定少於小的線段樹的節點數,所以小線段樹的size就擴大了2倍,最多擴大log次,也就是啟發式合併的複雜度分析。

bzoj 4012 開店

這是我這個周唯一寫的不是太裸的題了吧。

資料結構 資料結構緒論

資料結構是相互間存在一種或多種特定關係的資料元素的集合。程式設計 資料結構 演算法 資料結構是一門研究非數值計算的程式設計問題中的操作物件,以及他們之間的關係和操作等相關問題的學科。資料元素是組成資料的 有一定意義的基本單位,是計算機中通常作為整體處理,也被稱為記錄。乙個資料元素可以由若干個資料項組...

資料結構 資料結構演算法

分治法 對於乙個規模為n的問題,若該問題可以容易地解決 比如說規模n較小 則直接解決 否則將其分解為k個規模較小的子問題,這些子問題互相獨立且與原問題形式相同,遞迴地解這些子問題,然後將各子問題的解合併得到原問題的解。動態規劃法 這種演算法也用到了分治思想,它的做法是將問題例項分解為更小的 相似的子...

資料結構 01 資料與資料結構

1.資料data 資料是描述客觀事物的符號,是計算機中可以操作的物件,是能被計算機識別,並輸入給計算機處理的符號集合。2.資料元素data elements 資料元素是組成資料的 有一定意義的基本單位,在計算機中通常作為整體進行處理。3.資料物件data object 資料物件是性質相同的資料元素的...