有哪些分塊好題,最好是純資料結構做不了的?

時間 2021-06-03 13:22:09

1樓:RhmBWT

你可以看看YNOI2018

裡面好多分塊題的

Problem 5143. -- [Ynoi2018]五彩斑斕的世界Problem 5144. -- [Ynoi2018]末日時在做什麼?有沒有空?可以來拯救嗎?

Problem 5145. -- [Ynoi2018]未來日記(感覺比無腦分塊好一些的)

2樓:

退役多年的老鹹魚厚顏無恥地來強答一發

bzoj3744和bzoj3787

似乎的確不分塊是做不了的,至於算不算好題,只能說當年我和@AutSky JadeK 出這道題的時候還沒見過一樣的idea,雖然實現難度和思維難度都算不上多大。

時過境遷,各奔東西,大概唯一沒怎麼變化的就是我們仍然沒有妹子吧(x

3樓:艾慶興

Kth這個題啊,用莫隊還是可以的,假設你現在已經知道了區間[L,R]的第k大了,並且為之維護了乙個線段樹,以權值作為下標插入了[L,R]之間的每乙個數字。那麼,[L,R+1]這個區間的第K大,利用[L,R]的結果,你可以在O(logn)的時間做出來,[L,R-1]顯然也可以。

那麼,如果我們能把詢問的這些區間合理的安排,使得相鄰的區間不一樣的元素個數並不多,那麼複雜度就降下來了,這個做法就是莫隊了(莫濤大神發明的,他應該親自來答)。

把所有詢問排序,排序的規則如下:如果L在同乙個塊內(每sqrt(n)分一塊),那麼按R遞增排序,如果L不在同乙個塊內,按L所在塊排序,這樣詢問相當於被分為了sqrt(n)個部分,每個部分裡面,R遞增,L相差不超過sqrt(n)。

那麼,對於每乙個塊來說,任何相鄰兩個點,L的差最多sqrt(n),塊內R的差,一共是n。

一共sqrt(n)個塊,L最多要走sqrt(n) * n歩(每個L最多走sqrt(n)就能走到下乙個L),而R最多要走sqrt(n) * n歩(一共sqrt(n)個塊,每個塊內的R一共走n歩)。

所以問題就解決了,複雜度nsqrt(n)*logn + Qlogn

現在來考慮有沒有辦法把線段樹替換掉,顯然是有的:

我們呢,把權值可取的範圍MAXN,分成sqrt(MAXN)塊,維護這樣兩個陣列:

num[i]:第i個塊內有多少個元素

vis[i]:數字i出現了多少次

對於每乙個詢問的區間[L,R],首先通過莫隊轉移到這個區間,然後,求第K大,就是個sqrt(MAXN)複雜度的暴力了,一共Q組詢問,複雜度就是Qsqrt(MAXN),總複雜度:

nsqrt(n)*logn+Qsqrt(MAXN)。

學習資料結構有什麼好的教程?

資料結構和數學很類似都是比較抽象的,而往往實際問題都是非常複雜的,所以要先掌握最基本最抽象最特殊的規律。學習資料結構首先要掌握一門計算機語言,起碼要知道語法,能利用它完成一些基本程式,就像首先要掌握數學最基本的加減乘除,定理之類的規則。其次要知道資料結構和演算法是分不開的,學習資料結構的同時也需要一...

有一道資料結構順序表的題,怎麼解?

皮皮關 遇到困難的問題不要迷茫,先試著分解它。這道題屬於鍊錶綜合問題,第二問略有難度。不要緊,先看第一問,第一問比較基礎。當然,要解答第一問,只需要熟悉鍊錶的基本做法。先問問自己是否熟悉鍊錶的基本操作,鍊錶節點定義為 include include include struct Node 基本用法 ...

C 語言有哪些復用資料結構的方法?

myd7349 我找到的一些資料 還有一些庫實現 甚至語言 ooc language,提供了乙個叫做 rock 的編譯器 2.就是前面回答的知友提到的用 void 型別的指標來實現泛型。這也有一些例子 nanomsg 實現的 list,queue 等資料結構 nanomsg src utils at...