| 比赛 |
26暑假集训模拟赛2 |
评测结果 |
AAAAAAAAAAA |
| 题目名称 |
It s Mooin Time III |
最终得分 |
100 |
| 用户昵称 |
默 |
运行时间 |
0.784 s |
| 代码语言 |
C++ |
内存使用 |
4.11 MiB |
| 提交时间 |
2026-07-02 09:06:34 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define INT_MAX (int)(1e18)
const int N=1e5+10;
int n,q;
vector<int> g[30];
inline int read(){
int t=0,f=1;
register char c=getchar();
while(c<'0'||c>'9') f=(c=='-')?(-1):(f),c=getchar();
while(c>='0'&&c<='9') t=(t<<3)+(t<<1)+(c^48),c=getchar();
return t*f;
}
char c[N];
signed main(){
freopen("Time.in","r",stdin);
freopen("Time.out","w",stdout);
n=read(),q=read();
for(int i=0;i<26;i++) g[i].push_back(0);
c[1]=getchar();
while(c[1]<'a'||c[1]>'z') c[1]=getchar();
g[c[1]-'a'].push_back(1);
for(int i=2;i<=n;i++) c[i]=getchar(),g[c[i]-'a'].push_back(i);
while(q--){
int l=read(),r=read();
int ll=INT_MAX,ans=-1;
for(int i=0;i<26;i++){
if(i==c[l]-'a') continue;
auto it=lower_bound(g[i].begin(),g[i].end(),l);
if(it==g[i].end()) continue;
ll=min(ll,*it);
}
// if(l==4842) cerr<<c[l]<<" "<<ll<<" "<<c[ll]<<" "<<c[ll-1]<<"\n";
for(int i=0;i<26;i++){
int L=l,R=*(--upper_bound(g[i].begin(),g[i].end(),r));
if(i==c[l]-'a') L=ll;
if(R<=L+1) continue;
int mid=L+R>>1;
int x1=*lower_bound(g[i].begin(),g[i].end(),mid);
int x2=*(--upper_bound(g[i].begin(),g[i].end(),mid));
if(x1==R&&x2<=L) continue;
else if(x1==R) ans=max(ans,(x2-L)*(R-x2));
else if(x2<=L) ans=max(ans,(x1-L)*(R-x1));
else ans=max(ans,max((x2-L)*(R-x2),(x1-L)*(R-x1)));
// if(ans==1877293341) cerr<<"L:"<<L<<" x1:"<<x1<<" "<<"x2:"<<x2<<" R:"<<R<<" c:"<<c[L]<<c[x1]<<c[x2]<<c[R]<<"\n";
}
cout<<ans<<"\n";
}
return 0;
}