poj 3061 Subsequence尺取法

来源:互联网 发布:国泰安数据库多少钱 编辑:程序博客网 时间:2024/04/27 15:58

点击打开链接

#include <iostream>#include <algorithm>using namespace std;const int M=101000;int a[M];int main(){int t;cin>>t;while(t--){long long sum=0,S;int ans=100100;int n;cin>>n>>S;for(int i=0;i<n;i++){cin>>a[i];sum+=a[i]; }if(sum<S){cout<<0<<endl;continue;}sum=0;int s=0,t=0; //  As...At-1>=s t为成立中最小一个 ,则As+1...At-2<As...At-2<S 若As+1.....At'-1成立  可以得出 t'>=t while(1)//t最多变化n次 复杂度为O(n)  {while(t<n && sum<S) //找到以as开头subsequnce的最小t {sum+=a[t];t++;}if(sum<S) break; ans=min(ans,t-s);sum-=a[s++];// 尺取到As+1 }cout<<ans<<endl;}return 0;} 


0 0