| 比赛 |
26暑假集训模拟赛2 |
评测结果 |
AWAAAWTTTTT |
| 题目名称 |
It s Mooin Time III |
最终得分 |
36 |
| 用户昵称 |
董彰奇 |
运行时间 |
5.668 s |
| 代码语言 |
C++ |
内存使用 |
4.14 MiB |
| 提交时间 |
2026-07-02 10:29:05 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n, q, x[100010], jl[27], cnt[27];
map<char, bool>mp;
string s;
int efl(int l, int r, int L, int R)
{
int ans = -1;
while(l <= r)
{
int mid = (l + r) / 2;
if(x[mid] > R)
{
r = mid - 1;
}
if(x[mid] >= L && x[mid] <= R)
{
ans = x[mid];
r = mid - 1;
}
if(x[mid] < L)
{
l = mid + 1;
}
}
return ans;
}
int efr(int l, int r, int L, int R)
{
int ans = -1;
while(l <= r)
{
int mid = (l + r) / 2;
if(x[mid] > R)
{
r = mid - 1;
}
if(x[mid] >= L && x[mid] <= R)
{
ans = x[mid];
l = mid + 1;
}
if(x[mid] < L)
{
l = mid + 1;
}
}
return ans;
}
int main()
{
freopen("Time.in", "r", stdin);
freopen("Time.out", "w", stdout);
scanf("%d%d", &n, &q);
cin >> s;
for(int i = 0; i < s.size(); i++)
{
mp[s[i]] = 1;
jl[s[i] - 'a' + 1]++;
}
for(int i = 0; i <= 25; i++)jl[i] = jl[i - 1] + jl[i];
for(int i = 0; i <= 25; i++)cnt[i] = jl[i];
for(int i = 0; i < s.size(); i++)
{
jl[s[i] - 'a'] ++;
x[jl[s[i] - 'a']] = i + 1;
}
for(int i = 1; i <= q; i++)
{
int l, r;
scanf("%d%d", &l, &r);
int cnt1 = -1;
for(int j = 0; j <= 25; j++)
{
if(!mp[j + 'a'])continue;
int ls = efl(cnt[j] + 1, cnt[j + 1], l, r);
if(ls == -1)continue;
for(int k = 0; k <= 25; k++)
{
if(k == j)continue;
if(!mp[k + 'a'])continue;
int rs = efr(cnt[k] + 1, cnt[k + 1], l, r);
if(rs == -1)continue;
for(int o = ls + 1; o < rs; o++)
{
if(s[o - 1] == k + 'a')
{
cnt1 = max(cnt1, (o - ls) * (rs - o));
}
}
}
}
printf("%d\n", cnt1);
}
return 0;
}