| 比赛 |
26暑假集训模拟赛2 |
评测结果 |
AWWAAATTTTT |
| 题目名称 |
It s Mooin Time III |
最终得分 |
36 |
| 用户昵称 |
对立猫猫对立 |
运行时间 |
5.971 s |
| 代码语言 |
C++ |
内存使用 |
18.10 MiB |
| 提交时间 |
2026-07-02 09:40:20 |
显示代码纯文本
// ML:256MB
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n, q, l, r;
char a[100005];
int qzh[30][100005]; // 11MB
signed main() {
freopen("Time.in", "r", stdin);
freopen("Time.out", "w", stdout);
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> n >> q;
for(int i = 1; i <= n; i++) {
cin >> a[i];
for(int j = 'a' - 'a' + 1; j <= 'z' - 'a' + 1; j++) {
qzh[j][i] = qzh[j][i - 1] + ((a[i] == 'a' + j - 1) ? 1 : 0);
}
}
while(q--) {
cin >> l >> r;
int i = l, j = r;
int ans = 0;
while(i < j) {
while(a[i] == a[i - 1]) i++;
for(int m = 'a' - 'a' + 1; m <= 'z' - 'a' + 1; m++) {
if(('a' + m - 1) != a[i] && (qzh[m][r] - qzh[m][i - 1])) {
j = lower_bound(qzh[m] + i + 1, qzh[m] + r + 1, qzh[m][r]) - qzh[m];
if(i > j) break;
int mid = (i + j) >> 1;
if(qzh[m][mid] != qzh[m][mid - 1] && i != mid && j != mid && i < j) {
// int lastans = ans;
ans = max(ans, (mid - i) * (j - mid));
// if(ans != lastans) {
// cout << mid << " in " << i << " " << j << endl;
// }
}
else {
int L = lower_bound(qzh[m] + i + 2, qzh[m] + mid + 1, qzh[m][mid]) - qzh[m];
int R = lower_bound(qzh[m] + mid + 1, qzh[m] + r + 1, qzh[m][mid] + 1) - qzh[m];
// int lastans = ans;
if(i < j && L != j && L != i && a[L] == ('a' + m - 1)) ans = max(ans, (L - i) * (j - L));
if(i < j && R != j && R != i && a[R] == ('a' + m - 1)) ans = max(ans, (R - i) * (j - R));
// if(ans != lastans) {
// cout << L << " " << R << " in " << i << " " << j << endl;
// }
}
}
}
if(i < j) i++;
}
cout << (ans == 0 ? -1 : ans) << endl;
}
return 0;
}