POJ 2887 Big String 塊狀鍊錶

2021-08-04 16:55:38 字數 996 閱讀 3991

初始給定乙個字串,然後有兩種操作:ic

hp在第

p 個字元前插入字元ch

;qp 查詢第

p 個位置上的字元。下標均是從1開始

用的塊狀鍊錶。塊狀鍊錶的基本操作有定位、插入、**、合併和刪除,各個操作均為o(

n√) 。這個題算是裸題了,留個模板

#include 

#include

#include

#include

#include

using

namespace

std;

const

int n = 1000000 + 10, m = 2000 + 10;

queue

que;

int head;

char str[n];

struct block

}g[m];

int new_block() //分配新塊

void del_block(int t) //刪除塊

void block_split(int idx, int k) //塊**

void block_init(char *str) //初始化

}for(int i = head; i != -1; i = g[i].next)

if(g[i].sz == m) block_split(i, m>>1); //塊滿,及時進行**

}void block_locate(int &idx, int &k) //塊定位

char block_query(int k)

void block_insert(int k, char ch) //插入

g[idx].sz++;

if(g[idx].sz == m) block_split(idx, m>>1);

}int main()

else}}

return

0;}

Poj 2887 Big String 塊狀陣列

塊狀陣列裸題.把鍊錶和陣列的特性結合起來.各個塊互不影響 包括長度 定位的時候看在哪一塊就可以了.各種複雜度都是 n.include include include define maxn 1000010 define maxm 1001 using namespace std int n,m,k,...

Poj 2887 Big String 塊狀陣列

塊狀陣列裸題.把鍊錶和陣列的特性結合起來.各個塊互不影響 包括長度 定位的時候看在哪一塊就可以了.各種複雜度都是 n.include include include define maxn 1000010 define maxm 1001 using namespace std int n,m,k,...

POJ2887 塊狀陣列

1 題意 給出乙個長串,然後給出n個操作,操作有兩種,在某個位置插入乙個字元,或者查詢第x個位置上的字元是什麼 2分析 1 快速輸出第x個位置上的字元,像直接儲存類資料結構中的陣列就可以,但是難在插入乙個字元時,後面所有字元都要動,所以不能用普通的陣列 而如果用鍊錶雖然能解決插入不超時的問題,但是因...