トピックリンクします。http://codeforces.com/contest/1145/problem/A
エイプリルフールの件名は、下がらない最長の連続配列を見つけ、シーケンスが半分を取得するために、半分を持つことです。
再帰
1つの インポートjava.util.Scanner。 2 3 パブリック クラスpro1145A { 4 5 パブリック 静的 INTの上昇(INT [] R、int型 IND、INT LEN){ 6 場合(LEN == 1)リターン 1 。 7 ブールフラグ= 真。 8 用(INT I = IND; iは<+ IND lenの-1; ++ I){ 9 もし(R [I]> R [I + 1 ]){ 10 フラグ= 偽。 11 ブレーク; 12 } 13 } 14 であれば(フラグ) 15 リターンLEN。 16 他{ 17 リターン Math.max(LEN / 2 lenをlenの上昇(R、IND / 2)、立ち上がり(R、IND + / 2 ))。 18 } 19 } 20 21 公共 静的 ボイドメイン(文字列[]引数){ 22 スキャナ入力= 新しいスキャナ(System.in)。 23 24 INT N。 25 N = input.nextInt()。 26 27 のint []生=新しい INT [N]; 28 のために(int型 ; iがNを<++ I = 0を{I) 29 [I] =生input.nextInt()。 30 } 31 32 INT ANS =立ち上がり(生、0 、N)。 33 のSystem.out.println(ANS)。 34 } 35 }
分治
1 パッケージcom.jetbrains。 2 3 インポートjava.util.Scanner。 4 5 パブリック クラスpro1145A { 6 7 パブリック 静的 int型の上昇(INT [] ARR、int型の L、int型R){ 8 であれば(L + 1 == R)リターン 1 。 9 10 INTミッド= Lの+(RL)/ 2 。 11 INTランス= 立ち上がり(ARR、L、MID)、 12 のRAN = 立ち上がり(ARR、中、R)。 13 14 もし(ARR [ミッド1] <= ARR [中間] &&ランス==半ばL 15の && RANS == R- MID) 16 戻り ランス+ RANSと、 17 他 18 リターンMath.max(ランス、RANS)。 19 } 20 21 公共 静的 ボイドメイン(文字列[]引数){ 22 スキャナ入力= 新しいスキャナ(System.in)。 23 24 INT N。 25 N = input.nextInt()。 26 27 のint []生= 新しい INT [N]。 28 のための(int型 i = 0; iがNを<; ++ i)が{ 29 [I] =生input.nextInt()。 30 } 31 32 INT ANS =立ち上がり(生、0 、N)。 33 のSystem.out.println(ANS)。 34 } 35 }