比赛 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;
}