看完題目我們都知道是平衡樹,而且是要資瓷區間操作的平衡樹,並且要能區間翻轉,所以我們被迫選擇自帶三倍大常數的\(splay\),剩下的都是一些平衡樹的基操了。
操作\(1\) :插入,很簡單。該怎麼插就怎麼插
操作\(2\) :刪除,直接刪除。
操作\(3\) :翻轉,將要操作的子樹旋轉出來,然後直接打標記翻轉。
操作\(4\) :開始時將整個序列\(build\)出來,然後用陣列將原序列在平衡樹中的位置記錄下來。平衡樹中的乙個點被刪除後就給那個點打上標記,查詢時直接查對應的位置,如果被刪除後就輸出\(0\),否則先\(dfs\)將路上的標記\(pushdown\)下來,然後再旋轉到根輸出排名即可。
操作\(5\) :第\(k\)小,直接輸出即可。
操作\(6\) :狀壓壓字母,將要操作的子樹旋轉出來,然後直接輸出。
\(1.\)
inline int split(int l,int r)
\(rnk\)就是找第\(k\)個位置。
然後你要插入就
int u=split(pos,pos-1);
刪除就
int u=split(pos,pos);
找區間就
int u=split(l,r);
\(2.\)
為了不使我們\(split\)時越界,我們就在首尾搞兩個字母,然後要把讀入後的位置\(++\)。
然後呢?然後就完了。
上**:
inline int ids(int u)
inline void connect(int u,int f,int s)
inline void pushup(int u)
}inline int split(int l,int r)
inline void insert(int pos,int val)
int main()
return 0;
}
題解 P2058 海港
我們注意到資料範圍,發現二維陣列並不可取,但是我們又注意到 k i 3 105 ki 3 10 5,所以採取一種新的思想 將所有人都讀在乙個一維陣列裡面 使用乙個佇列 q q 來儲存第 i role presentation i i艘船上人數的範圍,即 q q 儲存的是兩個數 l r role pr...
題解 P4995 跳跳!
說實話這個題我一開始想了好久dfs超時得了30可能因為我太弱了 吃得苦中苦方為人上人現在終於a了當然體會更多 1 首先 這是個真的真的貪心題 貪心思路就是每次都從未跳過得最高的 或最低的 跳到最低處 最高處 這樣差值才最大 2 知道貪心思路了就要寫好 qaq 寫法有很多種,像我這種蒟蒻就只會寫這一種...
題解 P1434 滑雪
題目鏈結 此題運用功能強大的 暴力搜尋 記憶化搜尋才是重點!然而,這是一道經典的dp問題 如果我們用 dis i j 來表示座標為 i,j 時的高度 cnt i j 是我們的記憶化陣列 在合法的前提下,就有狀態轉移方程 dis i j max dis i 1 j dis i j 1 dis i 1 ...