「問題の解決」:D

質問A:D

制限時間:1秒   メモリ制限:512メガバイト

フェイス質問


彼は公に質問に直面して減少しました。

問題の解決策


ゲーム中にカットオフが、プロセスは非常に曲がりくねっています。

貪欲は良いアイデアをしたいです。しかし、最初はそれが間違っ単一のピークだと思いました。実際には、いくつかのピークは可能性があります。

三分のが、それはほとんどの周辺機器、大きなサンプルぞっと間違っていると思う、その後に、半分を開くWQSを書いて、会長に木を書き換えます。

話を戻そう。

ポジティブなソリューション貪欲ヒープを+。木の会長も達成することができます。私は木の会長で言うでしょう。

最初は貪欲です。いくつかの最小限の除去メートル最小の数$ AI $、$ BI $を削除するために削除する必要があります。

だから私は、リスト上の裸の第k-数を行うの背面に、$の前に$列挙を削除し、$ AI $ソートで考慮。

 

#include <ビット/ STDC ++ Hは>
 の#defineは長いlong int型
 の#define RINTレジスタINTを
 使用して、 名前空間STDを、
const  int型 N = 100005 ; 
インラインボイド読み取る(INTA)
{ 
    A = 0INT B = 1チャー CH = GETCHAR()。
    一方、(CH < ' 0 ' || CH> ' 9 '){ 場合(CH == ' - ')B = - 1 ; CH =GETCHAR();}
     一方(CH> = ' 0 ' && CH <= ' 9 '){A =(<< 3)+(<< 1)+ CH- ' 0 ' ; CH = GETCHAR();} 
    A = A * B。返します
} 
int型T、N、M、ANS。
構造体ノード{ int型、B;} MU [N]。
INTのルート[N]、LS [N << 6 ]、RS [N << 6 ]、S [N << 6 ]、SZ。
インラインブール CMP(ノードA、ノードB){ 戻り Aaの< Baのを、インサート(int型のx、int型&Y、int型の L、INT R、INT V)
{ 
    Y = ++ SZ。
    S [Y] = sで[X] + 1 もし(L == R)のリターン; 
    LS [Y] = LSを[X]; RS [Y] = RS [X]。
    INT半ば=(L + R)>> 1 場合(V <= MID)(LS [X]、LS [Y]、L、中、V)を挿入します。
    他の挿入(RS [X]、RS [Y]、ミッド+ 1 、R、V)。
} 
インラインINT get_rank(INT K、int型の L、INTR、INT X)
{ 
    もし、(R == x)をリターンS [k]は、
    INT半ば=(L + R)>> 1 もし(x <= MID)戻りget_rank(LS [k]は、L、中、X)。
     リターン S [LSは、[K] + get_rank(RS [k]は、中間+ 1 、R、X)。
} 
インラインINTは(ASK int型 L、INT R、INT V)
{ 
    int型 X =ルート〔L- 1 ]、Y = ルート[R]を。
    int型、L = 1、R = N。
    一方、(L <= R)
    {
        INT半ば=(L + R)>> 1 INT、T = get_rank(Y、1、N、MID)-get_rank(X、1 、N、MID)。
        もし(T> = V)、R =半ば1 リットル=ミッド+ 1 ; 
    } 
    戻りL。
} 
main()の符号付き
{ 
//     freopenは( "1.in"、 "R"、STDIN)を、
//     freopenは( "s1.out"、 "W"、STDOUT)。
    (T)を読み出します。
    ながら(T-- 
    { 
        ANS = SZ = 0 ;(n)を読み取り、(m)を読み出します。
        ための RINT I =(1 ; iが<= N; ++I)
            (MU [I] .A)、.B)[I](MUを読み取る読み取ります。
        ソート(MU + 1、μ+ N + 1 、CMP)。
        ため(RINT i = 1 ; iが<= N; ++ I)
            挿入(ルート[I - 1 ]、根[i]は、1 、N、ミュー[I] .B)。
        (RINT I = 0 ; I <= M; ++ I)
            ANS = MAX(ANS、ミュー[I + 1 ] .A *尋ねる(I + 1、N、M-I + 1 ))。
        printf(" %LLDする\ n " 、ANS)。
    } 
}
コードの表示

 

PS。私はこんにゃくはトーナメントの被写体に書いたビート数の一人です。ただ、映画でそれを発見した233のメモリに、ああ、約2万セットを取りました。

 

おすすめ

転載: www.cnblogs.com/xingmi-weiyouni/p/11655790.html