| 5 | |
| 6 | int t[N][18], a[N]; |
| 7 | void build(int n) { |
| 8 | for(int i = 1; i <= n; ++i) t[i][0] = a[i]; |
| 9 | for(int k = 1; k < 18; ++k) { |
| 10 | for(int i = 1; i + (1 << k) - 1 <= n; ++i) { |
| 11 | t[i][k] = min(t[i][k - 1], t[i + (1 << (k - 1))][k - 1]); |
| 12 | } |
| 13 | } |
| 14 | } |
| 15 | |
| 16 | int query(int l, int r) { |
| 17 | int k = 31 - __builtin_clz(r - l + 1); |