Advertisement
K_Y_M_bl_C

Untitled

Nov 6th, 2017
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.49 KB | None | 0 0
  1. vi buildLCP(vi &sa, vi &s, ll &ans, int sz)
  2. {
  3.     int n = s.size();
  4.     vi lcp(n);
  5.     vi pos(n);
  6.     int l = 0;
  7.     for (int i = 0; i < n; ++i)
  8.     {
  9.         pos[sa[i]] = i;
  10.     }
  11.     for (int i = 0; i < n; ++i)
  12.     {
  13.         if (pos[i] == n - 1)
  14.         {
  15.             l = 0;
  16.             continue;
  17.         }
  18.         l = max(l - 1, 0);
  19.         int j = sa[pos[i] + 1];
  20.         while (max(i, j) + l < sz && s[i + l] == s[j + l])
  21.             ++l;
  22.         lcp[pos[i]] = l;
  23.     }
  24.     for (int i = 0; i < sz; ++i)
  25.         ans += lcp[pos[i]];
  26.     return lcp;
  27. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement