サノスソート

トピックリンクします。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 }
コードの表示

 

おすすめ

転載: www.cnblogs.com/Kiritsugu/p/11075015.html