塊狀鍊錶模板

2021-08-07 11:48:14 字數 1509 閱讀 7664

塊狀鍊錶:

//下標從0開始

//塊大小和塊數設為比sqrt(n)稍大

const

int n = 2000000 + 10, block_sz = 4000 + 100, block_num = 4000 + 10;

queue

que;

int head;

char str[n];

struct block

} g[block_num];

int new_block() //新建塊

void del_block(int t) //刪除塊

void block_update(int idx) //翻轉塊

}void block_split(int idx, int k) //把第idx塊**成兩個,前k個元素劃分到第一塊,其餘元素劃分到第二塊

void block_merge(int idx) //合併維護塊

else

break;}}

}void block_init() //初始化

void block_locate(int &idx, int &k) //查詢全域性第k個元素在某個塊的某個位置

void block_insert(int k, int n, char *str) //在全域性的第k個元素後插入長度為n的字串

block_merge(head);

}void block_delete(int l, int r)//刪去全域性的[l,r]內所有元素

void block_rev(int l, int r)//翻轉全域性的[l,r]內所有元素

tmp[++cnt] = st, tmp[0] = en_next;

for(int i = cnt; i >= 1; i--) g[tmp[i]].next = tmp[i-1];

block_merge(head);

}void block_print(int k) //列印全域性的第k個元素

void block_print(int k, int n, char *str) //列印全域性的第k個元素後的長度為n的字串

str[len] = '\0';

puts(str);

}int main()

str[i++] = '\0';

block_insert(cur, len, str);

}else

if(op[0] == 'd')

else

if(op[0] == 'r')

else

if(op[0] == 'g')

else

if(op[0] == 'p') cur--;

else

if(op[0] == 'n') cur++;

}return

0;}

塊狀鍊錶(STL rope)

塊狀鍊錶 stl rope 首先介紹一下塊狀鍊錶。我們都知道 陣列 具有 o 1 的查詢時間,o n 的刪除,o n 的插入。鍊錶 具有 o n 的查詢時間,o 1 的刪除,o 1 的插入。既然陣列和鍊錶各有優劣,那麼我們為何不將鍊錶和陣列組合起來,一起來均攤時間呢?做法就是維護乙個鍊錶,鍊錶中的每...

塊狀鍊錶與塊狀樹初步

1.塊狀鍊錶的基本思想 常見的線性表結構修改操作有 再某一位置後插入一段數,從某一位置開始刪除連續若干個數,我們不妨先來看看陣列和鍊錶這兩種常用線性結構的實現效果。可見,它們各有各的優勢和缺點,且恰巧是優勢互補。我們不禁想,如果把兩者結合起來,是不是會有更優異的表現?塊狀鍊錶正好是基於這個思想,將陣...

塊狀鍊錶全紀錄

塊狀鍊錶的簡單介紹 塊狀鍊錶,可以說是一種很犯規的資料結構 支援動態的序列加入刪除,詢問區間和之類的操作 同時擁有陣列和鍊錶的優點 陣列 所有資料在記憶體中是緊湊儲存的,優點是定位快 o 1 鍊錶 通過指標將不同位置的元素鏈結起來 修改快 o 1 總的來說重要操作只有幾個 定位,插入,合併 塊狀鍊錶...