比赛 26暑假集训模拟赛2 评测结果 AWWWWAWWWWW
题目名称 It s Mooin Time III 最终得分 18
用户昵称 zcx 运行时间 0.946 s
代码语言 C++ 内存使用 5.25 MiB
提交时间 2026-07-02 09:50:38
显示代码纯文本
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e5 + 5;

int n,q;
int a[N],f[N];
vector<int> b[27];

int erf(int L,int R,int x){
    if(b[x].empty()) return 0;
    int l = 1,r = b[x].size() - 1;
    while(l < r){
        int mid = (l + r + 1)>>1;
        if(b[x][mid] <= R) l = mid;
        else r = mid - 1;
    }
    if(b[x][l] <= L) return 0;
    return b[x][l];
}

int erf_mid(int L,int R,int M,int x,int y){
    int l = 1,r = b[x].size() - 1;
    while(l < r){
        int mid = (l + r)>>1;
        if(b[x][mid] >= M) r = mid;
        else l = mid + 1;
    }
    if(b[x][l] == y && b[x][l - 1] < L) return 0;
    if(b[x][l] == y || (b[x][l - 1] > L && b[x][l] - M > M-b[x][l-1])) return b[x][l - 1];
    return b[x][l];
}

signed main()
{
    freopen("Time.in","r",stdin);
    freopen("Time.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin>>n>>q;
    for(int i = 1;i <= n;i++){
        char c; cin>>c;
        a[i] = c - 'a' + 1;
        if(b[a[i]].empty()) b[a[i]].push_back(0);
        b[a[i]].push_back(i);
    }
    for(int i = n; i >= 1;i--){
        if(a[i] == a[i + 1]) f[i] = f[i + 1];
        else f[i] = i + 1;
    }
    
    while(q--){
        int l,r,ans = -1;cin>>l>>r;
        for(int i = 1;i <= 26;i++){
            if(i == a[l]) continue;
            int y = erf(l,r,i);if(!y) continue;
            int m = (y + l)>>1;
            int x = erf_mid(l,r,m,i,y);if(!x || x < l) continue;
            ans = max(ans,(y - x) * (x - l));
        }
        int i = a[l];l = f[l];
        int y = erf(l,r,i),m = (y + l)>>1;
        int x = erf_mid(l,r,m,i,y);
        if(y && x && x >= l && l > r) ans = max(ans,(y - x) * (x - l));
        cout<<ans<<endl;
    }
    return 0;
 }