Advertisement
Galebickosikasa

Untitled

May 4th, 2020
35
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.71 KB | None | 0 0
  1. vector<int> suf (string s) {
  2. s += '#';
  3. int n = sz (s);
  4. vector<int> p (n), c (n);
  5. vector<pair<char, int>> a (n);
  6. fr (i, n) a[i] = {s[i], i};
  7. sort (all (a));
  8. fr (i, n) p[i] = a[i].se;
  9. c[p[0]] = 0;
  10. fl (i, 1, n) {
  11. if (a[i].fi == a[i - 1].fi) c[p[i]] = c[p[i - 1]];
  12. else c[p[i]] = c[p[i - 1]] + 1;
  13. }
  14. int k = 0;
  15. while ((1<<k) < n) {
  16. vector<pair<pii, int>> _a (n);
  17. fr (i, n) _a[i] = {{c[i], c[(i + (1<<k)) % n]}, i};
  18. sort (all (_a));
  19. fr (i, n) p[i] = _a[i].se;
  20. c[p[0]] = 0;
  21. fl (i, 1, n) {
  22. if (_a[i].fi == _a[i - 1].fi) c[p[i]] = c[p[i - 1]];
  23. else c[p[i]] = c[p[i - 1]] + 1;
  24. }
  25. ++k;
  26. }
  27. for (auto& x: p) cout << x << ' ';
  28. return vector<int> (p.begin () + 1, p.end ());
  29. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement