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