比赛 |
2025.4.12 |
评测结果 |
RRRRRRRRRRR |
题目名称 |
It s Mooin Time III |
最终得分 |
0 |
用户昵称 |
htl |
运行时间 |
2.266 s |
代码语言 |
C++ |
内存使用 |
3.05 MiB |
提交时间 |
2025-04-12 11:44:24 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
char s[100010];
long long n,q,l,r,tl,tr,ti,tk,tj;
int v1[28][100010];
int v2[28][100010];
int main()
{
cin>>n>>q;
for(int i=1;i<=n;i++)
{
cin>>s[i];
}
for(int i=1;i<=26;i++)
{
int tmp=-1;
for(int j=1;j<=n;j++)
{
if(s[j]==char(i-1+'a'))
{
tmp=j;
}
v1[i][j]=tmp;
}
tmp=-1;
for(int j=n;j>=1;j--)
{
if(s[j]==char(i-1+'a'))
{
tmp=j;
}
v2[i][j]=tmp;
}
}
while(q--)
{
cin>>l>>r;
long long ans=-1;
for(int i=1;i<=26;i++)
{
tk=v1[i][r];
ti=-1;
for(int j=l;j<=r;j++)
{
if(s[j]!=char(i-1+'a'))
{
ti=j;
break;
}
}
if(ti==-1)
{
continue;
}
tr=v1[i][tk-1];
tl=v2[i][ti];
tj=-1;
long long m1=-10,m2=-10;
while(tr-tl>2)
{
if(m1==v1[i][tl+(tr-tl)/3]&&m2==v2[i][tr-(tr-tl)/3])
break;
m1=v1[i][tl+(tr-tl)/3];
m2=v2[i][tr-(tr-tl)/3];
if((m1-ti)*(tk-m1)>(m2-ti)*(tk-m2))
tr=m2;
else
tl=m1;
}
for(int j=tl;j<=tr;j++)
{
tj=max((j-ti)*(tk-j),tj);
}
ans=max(ans,tj);
}
cout<<ans<<endl;
}
return 0;
}