Advertisement
bibaboba12345

Untitled

Jan 28th, 2023
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.03 KB | None | 0 0
  1. struct SegTree {
  2. vector<pair<int,int> > tree;
  3. void build(string s) {
  4. int n = s.size(), h = 1;
  5. while (h < n) {
  6. h *= 2;
  7. }
  8. tree.resize(h * 2);
  9. for (int i = h * 2 - 1; i > 0; i--) {
  10. if (i >= h) {
  11. if (i - h < n) {
  12. tree[i] = { s[i-h] - 'a', -(i - h) };
  13. }
  14. else {
  15. tree[i] = { 123, -(i - h) };
  16. }
  17. }
  18. else {
  19. tree[i] = min(tree[i * 2], tree[i * 2 + 1]);
  20. }
  21. }
  22. }
  23. pair<int, int> get(int v, int l, int r, int L, int R) {
  24. if (l > R || r < L) {
  25. return { 123, 123 };
  26. }
  27. if (L >= l && R <= r) {
  28. return tree[v];
  29. }
  30. return min(get(v * 2, l, r, L, (L + R) / 2), get(v * 2 + 1, l, r, (L + R) / 2 + 1, R));
  31. }
  32. int GetMinInd(int l, int r) {
  33. l++;
  34. r++;
  35. return (get(1, l, r, 1, tree.size() / 2).second) * -1;
  36. }
  37. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement