#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAX(x,y) (x>y?x:y)
#define N 200010
int num[N],n;
int m;
int st[20][N];
int tlog2[N];
void ST(){
for(int i=1;i<=n;i++)
st[0][i]=num[i];
for(int j=1;j<=tlog2[n];j++){
for(int i=0;j<=tlog2[n+1-i];i++)
st[j][i]=MAX(st[j-1][i],st[j-1][i+(1<<j>>1)]);
}
}
int RMQ(int l,int r){
int tmp=tlog2[r-l+1];
return MAX(st[tmp][l],st[tmp][r-(1<<tmp)+1]);
}
int main(void){
tlog2[0]=-1;
for(int i=1;i<N;i++)
tlog2[i]=((i&(i-1))?tlog2[i-1]:tlog2[i-1]+1);
while(scanf("%d%d",&n,&m),n>=0||m>=0){
int i;
for(i=1;i<=n;i++)
scanf("%d",&num[i]);
ST();
for(i=n;i>=1;i--){
int k=1;
int s=0;
int c=0;
while(k<=n){
if(k+i-1>n)
break;
s+=RMQ(k,k+i-1);
c++;
k+=i;
if(s>m)
break;
}
if(s>m){
printf("%d\n",c);
break;
}
}
if(i==0)
printf("-1\n");
}
}
RMQ
最新推荐文章于 2022-02-23 15:02:25 发布