|
1 | 1 | #define PROBLEM \ |
2 | 2 | "https://judge.yosupo.jp/problem/longest_common_substring" |
3 | 3 | #include "../template.hpp" |
4 | | -#include "../../../library/strings/suffix_array/suffix_array_query.hpp" |
| 4 | +#include "../../../library/strings/suffix_array/suffix_array.hpp" |
5 | 5 | int main() { |
6 | 6 | cin.tie(0)->sync_with_stdio(0); |
7 | 7 | string s, t; |
8 | 8 | cin >> s >> t; |
9 | 9 | string both = s + '$' + t; |
10 | 10 | auto [sa, sa_inv, lcp] = get_sa(both, 256); |
11 | | - sa_query sf_a(both, sa, sa_inv, lcp); |
12 | 11 | pair<int, int> substr_s = {0, 0}, substr_t = {0, 0}; |
13 | | - for (int i = 0; i < sz(sf_a.lcp); i++) { |
14 | | - if (both[sf_a.sa[i]] == '$' || |
15 | | - both[sf_a.sa[i + 1]] == '$') |
| 12 | + for (int i = 0; i < sz(lcp); i++) { |
| 13 | + if (both[sa[i]] == '$' || both[sa[i + 1]] == '$') |
16 | 14 | continue; |
17 | | - bool before_in_s = (sf_a.sa[i] < sz(s)); |
18 | | - bool after_in_s = (sf_a.sa[i + 1] < sz(s)); |
| 15 | + bool before_in_s = (sa[i] < sz(s)); |
| 16 | + bool after_in_s = (sa[i + 1] < sz(s)); |
19 | 17 | if (before_in_s ^ after_in_s) { |
20 | | - if (sf_a.lcp[i] > substr_s.second - substr_s.first) { |
21 | | - substr_s = {sf_a.sa[i], sf_a.sa[i] + sf_a.lcp[i]}; |
22 | | - substr_t = { |
23 | | - sf_a.sa[i + 1], sf_a.sa[i + 1] + sf_a.lcp[i]}; |
| 18 | + if (lcp[i] > substr_s.second - substr_s.first) { |
| 19 | + substr_s = {sa[i], sa[i] + lcp[i]}; |
| 20 | + substr_t = {sa[i + 1], sa[i + 1] + lcp[i]}; |
24 | 21 | if (after_in_s) swap(substr_s, substr_t); |
25 | 22 | substr_t.first -= int(sz(s)) + 1; |
26 | 23 | substr_t.second -= int(sz(s)) + 1; |
|
0 commit comments