POJ 2887 Big String 線段樹離線

2021-08-07 17:55:03 字數 1221 閱讀 6929

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

hp在第

p 個字元前插入字元ch

;qp 查詢第

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

線段樹離線操作,腦洞大開

#include 

using namespace std;

const int n = 1000000 + 10, inf = 0x3f3f3f3f;

char ori[n], pat[n];

char op[n], ch[n];

int num[n], pos[n], rpos[n];

struct node

tr[n*4];

void push_up(int k)

void build(int l, int r, int k)

int mid = (l + r) >> 1;

build(l, mid, k << 1);

build(mid + 1, r, k << 1|1);

push_up(k);

}void update(int

x, int val, int k)

int mid = (tr[k].l + tr[k].r) >> 1;

if(x

<= mid) update(x, val, k << 1);

else update(x, val, k << 1|1);

push_up(k);

}int query(int

x, int k)

int main()

else scanf("%d", &pos[i]), num[i] = num[i-1];

}int n = num[m];

build(1, n, 1);

for(int i = m; i >= 1; i--) //從後往前開始插入到線段樹,從前往後的話,後插入的狀態影響之前的狀態,造成位置無法確定

if(op[i] == 'i')

int idx = 0;

for(int i = 1; i <= n; i++) //把原串補進去

if(pat[i] == '\0') pat[i] = ori[idx++];

for(int i = 1; i <= m; i++)

else update(rpos[i], 1, 1);

}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個位置上的字元,像直接儲存類資料結構中的陣列就可以,但是難在插入乙個字元時,後面所有字元都要動,所以不能用普通的陣列 而如果用鍊錶雖然能解決插入不超時的問題,但是因...