E.XKCのバスケットボールチーム
PS:
ゲーム中のタイトルを読み違えが、(痛み)を発見していません。要件を満たすために必要な数は、何のアイデアがなかったことを、私はそれが非常に簡単で、ほとんどの長距離用で期待していませんでした。
溶液:
私は<jのための役割ので、[j]が完全に[I]で置き換えることができます前に戻ってからの貪欲はその後数iのために、[I] <= A [j]は、単調に増加するシーケンスを維持しています。
1つの#include <ビット/ STDC ++ H> 2 使用して 名前空間STDを、 3 のconst int型 MAXN = 5E5 + 5 。 4のtypedef 長い 長LL。 5 6インラインint型リード() 7 { 8 チャー CH = GETCHAR()。INT X = 0、F = 0 。 9 一方(CH < ' 0 ' || CH> ' 9 ')は、f | = CH == ' - '、CH = GETCHAR()。 10 一方、(CH> = ' 0 ' && CH <= ' 9 ')、X = X * 10 + CH- ' 0 '、CH = )(GETCHAR。 11 リターン F - ?X:X; 12 } 13 14 15 INT [MAXN]。 16 のint NUM [MAXN]。 17ベクター< INT > V。 18 INT メイン(){ 19 のint N、M; N =読み取る(); M = )(読み取ります。 20 のために(int型 i = 1 ; iが<= N; iが++)[I] =読む(); 21 V.push_back(N); NUM [N] = - 1 。 22 のために(int型 I = N- 1、I> = 1 ; i-- ){ 23 INT TMP = A [i]が+ M。 24 INTは L = 0。INT R = V.size() - 1 ; 25 INT ANS = - 1 。 26 一方(L <= R){ 27 INT半ば=(L + R)/ 2 。 28 であれば([V [中間]]> = TMP) 29 { 30 ANS = MAX(ANS、V [中間])。 31 R =半ば1 。 32 } 33 他{ 34 、L =ミッド+ 1 。 35 } 36 } 37 であれば(ANS == - 1)NUM [I] =のANS。 38 他 NUM [I] = ANS-I- 1 。 39 であれば([I]> [V [V.size() - 1 ])V.push_back(I)。 40 41 } 42 のための(int型 i = 1 ; iが<= N; I ++){ 43 であれば(I == 1)COUT << NUM [I]。 44 他の裁判所未満<< " " << NUM [i]は、 45 } 46 リターン 0 。 47 }