fork(7) download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. vector<int32_t> getSuffixArray(string& str) {
  5. vector<int32_t> ranks(str.size());
  6. vector<int32_t> newranks(str.size());
  7. for (int x = 0; x < str.size(); ++x)
  8. newranks[x] = x;
  9. sort(newranks.begin(), newranks.end(), [&](int32_t i, int32_t j) -> bool {
  10. assert(i < str.size());
  11. assert(j < str.size());
  12. return str[i] <= str[j];
  13. });
  14. cout << "here" << endl;
  15. for (int x = 0; x < str.size(); ++x)
  16. ranks[newranks[x]] = x;
  17. for (int x = 1; x <= str.size(); x <<= 1) {
  18. for (int y = 0; y < str.size(); ++y)
  19. newranks[y] = y;
  20. sort(newranks.begin(), newranks.end(), [&](int32_t i, int32_t j) -> bool {
  21. unsigned long long ki = 1ull*(ranks[i] + 1) << 32, kj = 1ull*(ranks[j] + 1) << 32;
  22. if (i + x < str.size())
  23. ki |= ranks[i + x] + 1;
  24. if (j + x < str.size())
  25. kj |= ranks[j + x] + 1;
  26. return ki <= kj;
  27. });
  28. // cout << newranks << endl;
  29. for (int x = 0; x < str.size(); ++x)
  30. ranks[newranks[x]] = x;
  31. }
  32. return move(newranks);
  33. }
  34.  
  35. int main() {
  36. string str;
  37. vector<int32_t> prtemp;
  38. cin >> str;
  39. prtemp = getSuffixArray(str);
  40. // cout << prtemp << endl;
  41. return 0;
  42. }
  43.  
Runtime error #stdin #stdout #stderr 0s 3284KB
stdin
sandkjasndkjasndkajnsdkjasndkjasndkjasndkasndkjasnkdjanskdj
stdout
Standard output is empty
stderr
prog: prog.cpp:11: getSuffixArray(std::string&)::<lambda(int32_t, int32_t)>: Assertion `j < str.size()' failed.