URAL - 1297 Palindrome(后缀数组求最长回文子串)(二)
(1<<(k+1)) <= j-i+1) k++; i = st[i][k]; j = st[j-(1<
> 1; int ans = 0, cur = 0; for (int i = 0; i < mid; i++) { int j = RMQ(rank[i], rank[n-i-1]); //奇对称 if ((j<<1) - 1 >
ans) { ans = (j<<1) - 1; cur = i - j + 1; } if (i) { j = RMQ(rank[i], rank[n-i]); //偶对称 if ((j << 1) > ans) { ans = j << 1; cur = i - j; } } } for (int i = cur; i < cur + ans; i++) printf("%c", r[i]); printf("\n"); } return 0; }