Advertisement
Guest User

ye boi

a guest
Mar 25th, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.55 KB | None | 0 0
  1. void build() {
  2. for (int i = 0; i < N; i++) { sa[i] = i; key[i] = text[i]; }
  3. sort(sa, sa+N, Cmp());
  4. for (int K = 1; ; K *= 2) {
  5. for (int i = 0; i < N; i++)
  6. ranku[sa[i]] = i>0 && key[sa[i-1]]==key[sa[i]] ? ranku[sa[i-1]] : i;
  7. if (K >= N) break;
  8. for (int i = 0; i < N; i++)
  9. key[i] = ranku[i] * (N+1LL) + (i+K < N ? ranku[i+K]+1 : 0);
  10. sort(sa, sa+N, Cmp());
  11. }
  12. for (int i = 0, k = 0; i < N; i++) {
  13. if (k > 0) k--;
  14. if (ranku[i] == N-1) { lcp[N-1] = -1; k = 0; continue; }
  15. int j = sa[ranku[i]+1];
  16. while (text[i+k] == text[j+k]) k++;
  17. lcp[ranku[i]] = k;
  18. }
  19. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement