zoukankan      html  css  js  c++  java
  • poj3061-subsequence

    二分法时间复杂度O(nlogn)

    尺取法时间复杂度O(n)

    #include <iostream>  
    #include <algorithm>  
    using namespace std;  
      
    #define N 100010  
    int arr[N+10];  
    //int sum[N+10];  
      
    int main()  
    {   //二分法  
        /*int cases; 
        int n, s; 
        cin>>cases; 
        while (cases--) { 
            cin>>n>>s; 
            for (int i=0; i<n; i++) { 
                cin>>arr[i]; 
            } 
            for (int i=0; i<n; i++) { 
                sum[i+1]=sum[i]+arr[i]; 
            } 
            if (sum[n]<s) { 
                printf("0
    "); 
                continue; 
            } 
            int res=n; 
            for (int i=1; sum[i]+s<=sum[n]; i++) { 
                int t =lower_bound(sum+i, sum+n, sum[i]+s)-sum; 
                res=minn(res, t-i); 
            } 
            cout<<res<<'
    '; 
        } 
        */  
        //尺取法  
        int cases;  
        int n, s;  
        int res;  
        int i, j, sum;  
        cin>>cases;  
        while (cases--) {  
            cin>>n>>s;  
            for (int i=0; i<n; i++) {  
                cin>>arr[i];  
            }  
            res=n+1;  
            i=j=sum=0;  
            for (;;) {  
                while (i<n&&sum<s) {  
                    sum+=arr[i++];  
                }  
                if (sum<s) break;  
                res=min(res, i-j);  
                sum-=arr[j++];  
            }  
            if (res>n) res=0;  
            cout<<res<<'
    ';  
        }  
        return 0;  
    }  
    

      

  • 相关阅读:
    第一章:简介
    2018年10月底新公司
    第四章:集成
    第三章:如何建模服务
    第二章:演化架构师
    第一章:微服务
    4、工厂模式
    5、单例模式
    8、模板方法模式
    3、字典介绍
  • 原文地址:https://www.cnblogs.com/summernight/p/8535038.html
Copyright © 2011-2022 走看看