塊狀鍊錶:
//下標從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 總的來說重要操作只有幾個 定位,插入,合併 塊狀鍊錶...