| 4 | vector<segment> T; |
| 5 | int K; |
| 6 | void rebuild() { |
| 7 | int cnt = 0; |
| 8 | rep(i,0,size(T)) |
| 9 | cnt += size(T[i].arr); |
| 10 | K = static_cast<int>(ceil(sqrt(cnt)) + 1e-9); |
| 11 | vi arr(cnt); |
| 12 | for (int i = 0, at = 0; i < size(T); i++) |
| 13 | rep(j,0,size(T[i].arr)) |
| 14 | arr[at++] = T[i].arr[j]; |
| 15 | T.clear(); |
| 16 | for (int i = 0; i < cnt; i += K) |
| 17 | T.push_back(segment(vi(arr.begin()+i, |
| 18 | arr.begin()+min(i+K, cnt)))); } |
| 19 | int split(int at) { |
| 20 | int i = 0; |
| 21 | while (i < size(T) && at >= size(T[i].arr)) |