UVALive 2678 大于s的最短子序列和

时间:2022-10-29 21:10:16

input

n s 10<=n<=100000,s<1e9

a1 a2 ... an     ai<=10000

output

大于s的最短子序列和的长度,没有输出0

 #include <cstdio>
#include <queue>
#include <cstring>
#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <ctime>
#include <cmath>
#define MAX 100000 using namespace std;
int n,s,a[MAX+];
int main()
{
freopen("/home/user/桌面/in","r",stdin);
while(scanf("%d%d",&n,&s)==)
{
int ans=0x7fffffff;
scanf("%d",&a[]);
for(int i=;i<n;i++)
{
scanf("%d",&a[i]);
a[i]+=a[i-];
}
int p=;
for(int i=;i<n;i++)
{
if(a[i]-s>) p=lower_bound(&a[p],a+i,a[i]-s)-a;
if(p>) ans=min(ans,i-p+);
}
/* for(int i=0,j=0;i<n;i++)
{
if(a[j]>a[i]-s) continue;
while(a[j]<a[i]-s) j++;
ans=min(ans,i-j+1);
}*/
a[n-]>=s?printf("%d\n",ans):puts("");
}
//printf("time=%.3lf",(double)clock()/CLOCKS_PER_SEC);
return ;
}