比赛 26暑假集训模拟赛2 评测结果 RRRRRRRRRRR
题目名称 It s Mooin Time III 最终得分 0
用户昵称 VTXE 运行时间 0.030 s
代码语言 C++ 内存使用 4.01 MiB
提交时间 2026-07-02 09:19:28
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
#define ll long long

ll n,Q;
string s;
vector <ll> pos[30];
ll nxt[110000];

int 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;
	cin>>s;
	s=" "+s;
	for (int i=1;i<=n;i++){
		pos[s[i]-'a'].push_back(i);
	}
	for (int i=1;i<=n;i++) nxt[i]=1e9;
	for (int i=n-1;i>=1;i--){
		if (s[i]!=s[i+1]){
			nxt[i]=i+1;
		}else{
			nxt[i]=nxt[i+1];
		}
	}
	while (Q--){
		ll l,r;
		cin>>l>>r;
		ll ans=-1;
		for (int c=0;c<26;c++){
			if (pos[c].empty()||pos[c].front()>r) continue;
			ll k,i;
			if (pos[c].back()<=r){
				k=pos[c].back();
			}else{
				k=*prev(upper_bound(pos[c].begin(),pos[c].end(),r));
			}
			if (k<=l) continue;
			if (s[l]-'a'!=c){
				i=l;
			}else{
				i=nxt[l];
			}
			if (i>=k) continue;
			ll mid=(k+i)/2;
			auto it=lower_bound(pos[c].begin(),pos[c].end(),mid);
			if (it!=pos[c].end()){
				ll j=*it;
				if (j>i&&j<k){
					ans=max(ans,(j-i)*(k-j));
				}
			}
			if (it!=pos[c].begin()){
				ll j=*prev(it);
				if (j>i&&j<k){
					ans=max(ans,(j-i)*(k-j));
				}
			}
		}
		cout<<ans<<'\n';
	}
	return 0;
}