トピックの【CF1324D】ペア

  問題の意味:$ $ N-長のシーケンスを考えるには満足し$ 1 \ルI <J \ルN $と$ a_iを+ a_j> b_i + b_j $ A $(i、j)を$ログを取得します。


  私たちは、$を入れa_iを+ a_j> b_i + b_j $ $(a_iを-b_i)+(a_j-b_j)> 0 $に変形します。

  注文$ C_I = a_iを-b_i \;(1個の\ルI \ルN)$は、その後、わずか$ C_I + c_j> 0 $が必要です。

  $ N $それぞれ$ I $に$ 1 $のために、私たちは$ c_j>数-c_i $ $ J $のを満たすために発見した、と統計を使用することができ、アップ追加STLまたは半分は+ソートに解決しました。

  以下のための$ので、私\ NEQ J $時間、$(i、j)の答えは考え出したので、$と$は、(jは、i)は、確かに満たされていない$。$ I <J $は、ちょうど半分それは$私を満たしていません< J $、および$ 2 $で割りました。

  時間複雑$ O(nは\; \ログ\; N)$。


  統計では、我々は、統計が$ jの$ $ J \ NEQ I $を満たしていなかったことがわかります。

  現在の$ I $会う$ 2c_i> 0 $、すなわち$ C_I> 0 $ならば、彼は間違いなくカウントされるとしていました。

  答えは$ C_I>番号$私は$ 0 $ 2 $で割った$を満たすために統計の値から減算されるので。

  リファレンスコード:

#include <アルゴリズム> 
の#include <cstdioを>
 の#define INF 1E9
 の#define EPS 1E-6 
のtypedef 長い LL。

整数 nは、[ 200010 ]、B [ 200010 ]、K。
LL ANS;                                // 注意开長い長い

int型のmain(){ 

    scanf関数(" %のD "、&N)
    以下のためにINT iが= 1 ; I <= N; I ++ 
        のscanf(" %dの"、および[I])。
    以下のためのint型= I 1、X; I <= N; I ++ 
        scanfの(" %のD "、およびX)、A [I] - = X;     // ここでa_iをC_I上記と同等である
    
    STD ::ソート(A + 1。、+ N-A + 1 のためのINT I = 1 ; I <= N; I ++ ){ 
        K = STD :: UPPER_BOUND、(A + 1、+ N-A + 1、-a [I]) - A;    
         / / 上記シーク位置-a_iの最初の数よりも大きい
        IF([I]> 0)ans--;             // レイド決意a_iを> 0 
        ANS + =(LL)N - K +1 ; 
    } 
    
    のprintf(" %のLLD \ N- "、ANS >> 1);         // 2で割った回答

    戻り 0 ; 
}

おすすめ

転載: www.cnblogs.com/zengpeichen/p/12484976.html