Advertisement
childoffthedevil

Untitled

Feb 26th, 2020
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.31 KB | None | 0 0
  1.  
  2. #include <iostream>
  3. #include <string>
  4. #include <vector>
  5. #include <algorithm>
  6. using namespace std;
  7. int main() {
  8.     string s;
  9.     cin >> s;
  10.     s += "$";
  11.     int n = s.size();
  12.     vector<int> p(n), c(n);
  13.     //k=0
  14.     {
  15.         vector<pair<char, int>> a(n);
  16.         for (int i = 0; i < n; i++)
  17.         {
  18.             a[i] = {s[i],i};
  19.         }
  20.         sort(a.begin(), a.end());
  21.         for (int i = 0; i < n; i++)p[i] = a[i].second;
  22.         c[p[0]] = 0;
  23.         for (int i = 1; i < n; i++)
  24.         {
  25.             if (a[i].first == a[i - 1].first) {
  26.                 c[p[i]] = c[p[i - 1]];
  27.             }
  28.             else {
  29.                 c[p[i]] = c[p[i - 1]] + 1;
  30.             }
  31.         }
  32.     }
  33.     int k = 0;
  34.     while ((1 << k) < n) {
  35.         //k=>k+1
  36.         vector<pair<pair<int, int>, int>> a(n);
  37.         for (int i = 0; i < n; i++) {
  38.             a[i] = { {c[i],c[(i + (1 << k)) % n]},i };
  39.         }
  40.         sort(a.begin(), a.end());
  41.         /*for (int i = 0; i < n; i++) p[i] = a[i].second;
  42.         c[p[0]] = 0;
  43.         for (int i = 1; i < n; i++) {
  44.             if (a[i].first == a[i - 1].first) {
  45.                 c[p[i]] = c[p[i - 1]];
  46.             }
  47.             else {
  48.                 c[p[i]] == c[p[i - 1]] + 1;
  49.             }
  50.         }
  51.         */
  52.         for (int i = 0; i < n; i++)p[i] = a[i].second;
  53.         c[p[0]] = 0;
  54.         for (int i = 1; i < n; i++)
  55.         {
  56.             if (a[i].first == a[i - 1].first) {
  57.                 c[p[i]] = c[p[i - 1]];
  58.             }
  59.             else {
  60.                 c[p[i]] = c[p[i - 1]] + 1;
  61.             }
  62.         }
  63.        
  64.         k++;
  65.     }
  66.  
  67.     for (int i = 0; i < n; i++) {
  68.         cout<< p[i] << " ";
  69.     }
  70.     return 0;
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement