| 比赛 |
26暑假集训模拟赛2 |
评测结果 |
AAAAAAAAAAA |
| 题目名称 |
It s Mooin Time III |
最终得分 |
100 |
| 用户昵称 |
PXCZM |
运行时间 |
0.309 s |
| 代码语言 |
C++ |
内存使用 |
18.21 MiB |
| 提交时间 |
2026-07-02 10:30:57 |
显示代码纯文本
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int n,m;
string s;
int pre[100010][26],nxt[100010][26];
int main()
{
freopen("Time.in","r",stdin);
freopen("Time.out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(nullptr);cout.tie(nullptr);
cin>>n>>m>>s;
s=' '+s;
for(int i=1;i<=n;i++)
{
for(int j=0;j<26;j++) pre[i][j]=pre[i-1][j];
pre[i][s[i]-'a']=i;
}
for(int i=n;i>=1;i--)
{
for(int j=0;j<26;j++) nxt[i][j]=nxt[i+1][j];
nxt[i][s[i]-'a']=i;
}
while(m--)
{
int l,r; cin>>l>>r;
int c=s[l]-'a',pos=1e9;
ll ans=0;
for(int i=0;i<26;i++)
{
if(i==c) continue;
if(!nxt[l][i]) continue;
pos=min(pos,nxt[l][i]);
}
for(int i=0;i<26;i++)
{
int tmp=(i==c?pos:l);
int pos1=pre[r][i];
if(pos1<tmp+2) continue;
int mid=(tmp+pos1)>>1;
int pos2=pre[mid][i];
if(pos2>tmp) ans=max(ans,(ll)(pos2-tmp)*(pos1-pos2));
pos2=nxt[mid][i];
if(pos2!=pos1) ans=max(ans,(ll)(pos2-tmp)*(pos1-pos2));
}
if(!ans) cout<<-1<<'\n';
else cout<<ans<<'\n';
}
return 0;
}