數據結構記錄

分塊:數組

prob1:長度爲n的數列,n次操做,單點插入,單點/區間查詢(假設須要維護的信息能夠O(1)維護)優化

sulution:分塊,sqrt(n)次操做後重構,重構O(n),總複雜度O(nlogn)io

other_solu:用splay維護便可,O(nlogn),常數大,複雜度容許的話寫上面那個重構

 

prob2:長度爲n的數列,n次操做,每次操做是(l, r, c),詢問區間中等於c的有多少個,並將區間都改成c查詢

solution:分塊,每塊維護一個有序數組和覆蓋的lazy標記便可,查詢時當前塊有標記則O(1)獲得答案,不然O(logn)獲得,總複雜度是O(n*sqrt(n)*logn)co

實際上咱們只維護每一個塊是不是同一個數字,是則O(1)回答,不然暴力查詢。若塊大小爲k,則修改成O(k + n / k),查詢爲O(n)數字

但實際上一次操做最多使兩個塊,由同一個數字的狀態變爲非同一個數字的狀態,因此修改的均攤複雜度是O(n / k)的play

k取根號,總複雜度O(n^1.5)

 

prob3:長度爲n的數列,n次詢問,問區間衆數

solu1(離線):莫隊+set,O(n*sqrt(n)*logn)

solu2(在線):參見clj論文(區間衆數解題報告)第一種作法,複雜度同上

solu3(在線):clj論文的無修改優化作法,O(n^1.5)

solu4(離線):莫隊有個O(n^1.5)的作法,額外維護當前區間出現次數爲i的數字有多少個便可,這作法有空間優點,O(n)的空間

可以維護衆數出現次數,但沒法維護衆數是哪一個數

 

prob4:帶修改區間衆數

solution(在線):參見clj論文,O(n^(5/3))

 

prob5:查詢區間出現正偶數次/正奇數次的數字個數

solu:至關於count在模2意義下的衆數

相關文章
相關標籤/搜索