題目描述:
一條直線上n個點,每個點有個「彈力」,可以把當前位置x上面的ball彈到x+a[x]上面。
兩種操作
0. 修改a處的彈力值,程式設計b
1. 詢問a點的ball經過多少次能跳出n個點外(就是出界了)。。。。求出彈跳的次數和最後落腳的點。
塊狀鍊錶就是用來暴力模擬的。
用塊狀鍊錶可以把時間複雜度從o(n)變成o(sqrt(n))。
這道題目的複雜度為o(m*sqrt(n))。
具體實現還是直接看**容易理解……
#include #include #include #include using namespace std;
#define n 100100
int block[n], c[n], next[n], a[n], end[n];
int n, m, block_size;
void make(int x) else
}void change(int x, int y)
void ask(int x)
cout << ans << " " << ret << endl;
}int main()
for (int i=n; i; i--) make(i);
int op, x, y;
while (m--) else
}return 0;
}
塊狀鍊錶模板
塊狀鍊錶 下標從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 n...
塊狀鍊錶(STL rope)
塊狀鍊錶 stl rope 首先介紹一下塊狀鍊錶。我們都知道 陣列 具有 o 1 的查詢時間,o n 的刪除,o n 的插入。鍊錶 具有 o n 的查詢時間,o 1 的刪除,o 1 的插入。既然陣列和鍊錶各有優劣,那麼我們為何不將鍊錶和陣列組合起來,一起來均攤時間呢?做法就是維護乙個鍊錶,鍊錶中的每...
塊狀鍊錶與塊狀樹初步
1.塊狀鍊錶的基本思想 常見的線性表結構修改操作有 再某一位置後插入一段數,從某一位置開始刪除連續若干個數,我們不妨先來看看陣列和鍊錶這兩種常用線性結構的實現效果。可見,它們各有各的優勢和缺點,且恰巧是優勢互補。我們不禁想,如果把兩者結合起來,是不是會有更優異的表現?塊狀鍊錶正好是基於這個思想,將陣...