#include <algorithm>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
#define rep(i, a, b) for(int i = (a); i <= (b); ++i)
#define per(i, a, b) for(int i = (a); i >= (b); --i)
using namespace std;
const int N = 200005;
namespace SA{
int sa[N], hs[N], hr[N], rk[N];
int tmp[N], bin[N];
void build(char *S, int ls){
int sz = max(ls, 255);
rep(i, 1, ls) rk[i] = S[i];
rep(i, 1, sz) bin[i] = 0;
rep(i, 1, ls) ++bin[rk[i]];
rep(i, 2, sz) bin[i] += bin[i - 1];
rep(i, 1, ls) sa[--bin[rk[i]] + 1] = i;
for(int j = 1; j <= ls; j <<= 1){
int tot = 0;
rep(i, ls - j + 1, ls) tmp[++tot] = i;
rep(i, 1, ls) if(sa[i] - j > 0) tmp[++tot] = sa[i] - j;
rep(i, 1, sz) bin[i] = 0;
rep(i, 1, ls) ++bin[rk[i]];
rep(i, 2, sz) bin[i] += bin[i - 1];
per(i, ls, 1) sa[--bin[rk[tmp[i]]] + 1] = tmp[i];
tot = 1; tmp[sa[1]] = 1;
rep(i, 2, ls)
tmp[sa[i]] = rk[sa[i]] == rk[sa[i - 1]] && rk[sa[i] + j] == rk[sa[i - 1] + j] ? tot : ++tot;
rep(i, 1, ls) rk[i] = tmp[i];
if(ls == tot) break;
}
rep(i, 1, ls){
hs[i] = max(hs[i - 1] - 1, 0);
while(S[i + hs[i]] == S[sa[rk[i] - 1] + hs[i]]) ++hs[i];
hr[rk[i]] = hs[i];
}
}
}
char S[N];
int main(){
scanf("%s", S + 1);
int ls = strlen(S + 1);
SA::build(S, ls);
rep(i, 1, ls) printf("%d ", SA::sa[i]);
puts("");
rep(i, 2, ls) printf("%d ", SA::hr[i]);
}
| Compilation | N/A | N/A | Compile OK | Score: N/A | 显示更多 |
| Subtask #1 Testcase #1 | 37.67 us | 64 KB | Wrong Answer | Score: -100 | 显示更多 |
| Subtask #1 Testcase #2 | 44.2 us | 64 KB | Accepted | Score: 100 | 显示更多 |
| Subtask #1 Testcase #3 | 44.58 us | 64 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #4 | 43.7 us | 64 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #5 | 44.43 us | 64 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #6 | 43.4 us | 64 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #7 | 30.458 ms | 3 MB + 200 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #8 | 48.335 ms | 3 MB + 388 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #9 | 33.148 ms | 3 MB + 252 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #10 | 21.555 ms | 2 MB + 140 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #11 | 22.407 ms | 2 MB + 180 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #12 | 41.534 ms | 3 MB + 580 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #13 | 39.8 ms | 3 MB + 548 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #14 | 34.737 ms | 3 MB + 280 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #15 | 34.624 ms | 3 MB + 296 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #16 | 40.278 ms | 3 MB + 580 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #17 | 40.097 ms | 3 MB + 580 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #18 | 40.246 ms | 3 MB + 580 KB | Accepted | Score: 0 | 显示更多 |