配列セグメントII

トピックリンク

 

問題の意味

M連続するセグメントのシーケンスに分割され、そのためここで最小および最大期間です。

 

考え

明白な応答単調大きい答え、比較的少ないのサブセグメントの数。

でも小さいのに対し、この値よりも大きくする必要がありますMよりもセグメントの数は、答えを説明する場合は、サブ段落としてこの値を答えることができるかどうかを確認し、その後、半分の値とすることができます。

(二項はああ入門質問に答えます)。

 

二分回答テンプレートを書くための良いアイデア。テンプレートの李Yudong偉大な神-半分は読み取ることはできません。

コード

#include <iostreamの> 
する#include <cstdioを> 
する#include <アルゴリズム> 
の#include <CStringの> 
する#include <ベクトル> 
の#include <地図> 
の#include <cmath> 
の#include <cstdlib> 
の#include <CTIME> 
の#include <キュー>
 使用して 名前空間はstdを、

const  int型のmx = 1E5 + 5 const  int型 INF = 1E9; 

INTのN、M。
INT [MX]。
、CNT = 0 以下のためにint型 i = 1 ; iが<= N; iは++ ){
         場合(和+ [i]は> 中間の){ 
            合計は = [I]。CNT ++; 続け; 
        }  + = A [i]は、
    } 
    戻り CNT> = M。
} 

int型のmain(){ 
    CIN >> N >> M。
    INTは L = 0、R = 0 以下のためにint型 i = 1 ; iは= N <; iは++)scanf関数を(" %のD "、&​​[i])と、L = MAX(L [i])と、R + = [I]。
    
    一方、(L <= R){
         int型ミッド=(L + R)>> 1 もし(チェック(MID)){ 
            L =ミッド+ 1 
        } 
         R =半ば1 
    } 
    
    のprintf(" %d個の\ n " 、L)。
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/Maktub-blog/p/10994936.html