感觉思路没问题
#include <bits/stdc++.h>
#define int long long
using namespace std;
using Pii = pair<int, int>;
using ULL = unsigned long long;
const int kMaxN = 2e5 + 5, kB = 13331;
int T, n, l, r;
ULL h[kMaxN], pw[kMaxN];
string s;
map<ULL, vector<Pii>> mp;
ULL Hash(int x, int y) {
return h[y] - h[x - 1] * pw[y - x + 1];
}
bool W(int x) {
mp.clear();
for (int i = 1, j = x; j <= n; i++, j++) {
mp[Hash(i, j)].push_back({j, i});
}
for (auto [o, v] : mp) {
sort(v.begin(), v.end());
int c = 0, pr = -1e9;
for (Pii p : v) {
if (p.second > pr) pr = p.first, c++;
}
if (c >= l) return 1;
}
return 0;
}
signed main() {
cin.tie(0)->ios::sync_with_stdio(0), pw[0] = 1;
for (int i = 1; i < kMaxN; i++) pw[i] = pw[i - 1] * kB;
for (cin >> T; T--;) {
cin >> n >> l >> r >> s, s = ' ' + s;
for (int i = 1; i <= n; i++) {
h[i] = h[i - 1] * kB + s[i];
}
int l = 0, r = n + 1;
for (; l + 1 < r;) {
int mid = (l + r) / 2;
W(mid) ? (l = mid) : (r = mid);
}
// cout << W(3) << '\n';
cout << l << '\n';
}
}
/*
2 3
998244352
3
2
998244352
1
1
2
5
*/