rt
Wrong Answer.wrong answer On line 1 column 892243, read 5, expected 4.
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <map>
#include <set>
#define IDK 1000000
using namespace std;
string str;
int n = 1, i = 0, k = 1;
struct pairs {
public:
pair<int, int>p;
int bh;
pairs() = default;
pairs(pair<int, int>n, int h) { p = n, bh = h; }
const bool& operator==(const pairs& n) { return this->p == n.p; }
};
vector<int>jp;
vector<pairs>jp2;
vector<pair<int, int>>jp3;
vector<pairs>jp4;
vector<int> jssort(IDK);
vector<int>ranks;
const bool& cmp(const pairs& a, const pairs& b) { if (a.p != b.p)return a.p < b.p; else return a.bh < b.bh; }
void makeSA() {
jp.resize(str.size() + 1);
for (i = 0; i < str.size(); i++) {
if (str[i] >= '0' && str[i] <= '9')jp[i + 1] = (int)(str[i] - '0' + 1);
else if (str[i] >= 'A' && str[i] <= 'Z')jp[i + 1] = (int)(str[i] - 'A' + 11);
else jp[i + 1] = (int)(str[i] - 'a' + 37);
}
do {
for (i = 1; i + n < jp.size(); i++)jp2.push_back(pairs(pair<int, int>(jp[i], jp[i + n]), i));
for (i; i < jp.size(); i++)
jp2.push_back(pairs(pair<int, int>(jp[i], 0), i)); jp4.resize(jp2.size());
for (i = 0; i < jp2.size(); i++)++jssort[jp2[i].p.second];
for (i = 1; i < IDK; i++)jssort[i] = jssort[i] + jssort[i - 1];
for (i = jp2.size() - 1; i >= 0; i--)jp4[--jssort[jp2[i].p.second]] = jp2[i];
jssort.assign(IDK, 0); jp2 = jp4; jp4.clear(); jp4.resize(jp2.size());
for (i = 0; i < jp2.size(); i++)++jssort[jp2[i].p.first];
for (i = 1; i < IDK; i++)jssort[i] = jssort[i] + jssort[i - 1];
for (i = jp2.size() - 1; i >= 0; i--)jp4[--jssort[jp2[i].p.first]] = jp2[i];
jssort.assign(IDK, 0); jp2 = jp4; jp4.clear(); jp4.resize(jp2.size());
jp[jp2[0].bh] = 1;
for (i = 1; i < jp2.size(); i++) {
if (jp2[i].p != jp2[i - 1].p)jp[jp2[i].bh] = ++k;
else jp[jp2[i].bh] = jp[jp2[i - 1].bh];
}
if (k >= i - 1)goto end;
k = 1;
n <<= 1;
jp2.clear();
} while (n <= str.size());
end:
ranks.resize(jp.size());
for (i = 1; i < jp.size(); i++)
ranks[jp[i]] = i;
}
int main() {
ios::sync_with_stdio(0);
cin >> str;
makeSA();
for (i = 1; i < ranks.size(); i++)cout << ranks[i] << " ";
return 0;
}