Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct SegTree {
- vector<pair<int,int> > tree;
- void build(string s) {
- int n = s.size(), h = 1;
- while (h < n) {
- h *= 2;
- }
- tree.resize(h * 2);
- for (int i = h * 2 - 1; i > 0; i--) {
- if (i >= h) {
- if (i - h < n) {
- tree[i] = { s[i-h] - 'a', -(i - h) };
- }
- else {
- tree[i] = { 123, -(i - h) };
- }
- }
- else {
- tree[i] = min(tree[i * 2], tree[i * 2 + 1]);
- }
- }
- }
- pair<int, int> get(int v, int l, int r, int L, int R) {
- if (l > R || r < L) {
- return { 123, 123 };
- }
- if (L >= l && R <= r) {
- return tree[v];
- }
- return min(get(v * 2, l, r, L, (L + R) / 2), get(v * 2 + 1, l, r, (L + R) / 2 + 1, R));
- }
- int GetMinInd(int l, int r) {
- l++;
- r++;
- return (get(1, l, r, 1, tree.size() / 2).second) * -1;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement