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