#include<bits/stdc++.h>
using namespace std;
const int N = 1e4 + 5;
int n,t,p,q,l,r,k,minn=1e9,maxn=0;
int a[N];
bool check(int m)
{
minn=1e9,maxn=0;
int c=1;
for(int i=p;i<=q;i++)
{
minn=min(a[i],minn); maxn=max(maxn,a[i]);
if (maxn-minn>m) c++,minn=a[i],maxn=a[i];
}
if (c<=k) return true;
else return false;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin>>n>>t;
for(int i=1;i<=n;i++)
{
cin>>a[i];
minn=min(a[i],minn); maxn=max(maxn,a[i]);
}
int flag=maxn-minn;
while (t--)
{
cin>>p>>q>>k;
l=0,r=flag;
int mid;
while (l<r)
{
int mid=(l+r)/2;
if (check(mid)) r=mid;
else l=mid+1;
}
cout<<r<<endl;
}
return 0;
}
C
60pts
#include <bits/stdc++.h>
using namespace std;
const int N = 2000 + 5;
int a[N][N]={0};
bool vi[200]={0};
string t;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int n,i,j,ans=0;
cin>>t;
n=t.length();
if(n>2000){cout<<"known,next.";return 0;}
for(i=0;i<n;i++)
{
memset(vi,0,sizeof(vi));
for(j=i;j<n;j++)
{
if(!vi[t[j]]) a[i][j]=a[i][j-1]+1;
else a[i][j]=a[i][j-1];
vi[t[j]]=true;
}
}
for(i=1;i<n;i++)
for(j=i+1;j<n;j++)
ans=max(ans,a[0][i]*a[i+1][j]*a[j+1][n-1]);
cout<<ans;
return 0;
}