| 138 | return min(t[l][k], t[r - (1 << k) + 1][k]); |
| 139 | } |
| 140 | int get_lcp(int i, int j) { // lcp of suffix starting from i and j |
| 141 | if (i == j) return n - i; |
| 142 | int l = rank[i], r = rank[j]; |
| 143 | if (l > r) swap(l, r); |
| 144 | return query(l, r - 1); |
| 145 | } |
| 146 | int lower_bound(string &t) { |
| 147 | int l = 0, r = n - 1, k = t.size(), ans = n; |
| 148 | while (l <= r) { |