1229CをCodeforces。コンラートと会社の評価

ポータル

まず、浸透の度合いを取るよう、明らかに列挙その点、各点の真ん中のポイント数の真ん中を検討し、答えを計算する方法を考えます

だから、答えは、各点の度合いがや学位を取るということです

そして、各点は、そのメンテナンスが指摘から、すべての変更を$ベクトル$を開いたときに、直接暴力と暴力的な枠消しのうち変化と新しいエッジを追加します

これは、複雑さが正しいことを証明することができ、から二番目の公式な説明で実績のある二人は、そこにあります

証明$ 1 $:

同様に大きなポイント値に小さな値のポイントを聞かせかもしれません

まずルートの少ない$ Mは$ポイントよりも、単一の力が明らかに$ \ SQRT {M} $の複雑さよりも小さい場合、全体的な複雑さは、$ Qの\のSQRT {M} $以下であります

ルートの初期$ 1から$ $ $ Nプラスアレイとして並んでさえバック内のすべての変更、のすべての点を考慮すると、$ Mの$の$ Xの$点よりも大きいです

$ N + 1から$は、本明細書修飾の$ X $を意味する場所$ Iの$する$ X $の列挙後、$ X $ラスの$ $の最初の発生の位置に配置され、左から右に列挙アレイを起動します

そこ側面があるので、コストがすべて$ので[ラス+ 1、i]は$アレイ状に配置され、$ 1 $を生成する場合にのみ、その後明確配列$ラス+ $ 1から$ I $および$ X $を指し連続的な行

(すなわち、$ [1,5]、[6,10]、[11、30] ... $この)、最終的なノードの$ X $が均等に共有されているように、最も複雑さの$ O(N)の$

より大きい$ \ SQRT {M} $点が$ \のSQRT {M}を超えないので、全体的な複雑さは以下$ nはより大きい$ \ SQRT {M} $ポイントのように、$ \ SQRT {M} $

次いで、総複雑SQRT {N} \約$ Nを与えるために集積$($ N、M、Qの$同じ順序)

 

証明$ 2 $:

同様に大きなポイント値に小さな値のポイントを聞かせかもしれません

(図の後に変化しない、これは程度度ではないことに注意してください。)度の降順で行に従ってグラフのノードを検討

各$第X $の最初のノードは、ポイントエッジに接続された$第X $左と$ X $と$ \ SQRT {2メートル} $を超えません

もし以上$ \ SQRT {2メートル} $、最初$ Xの$度以上$ \ SQRT {2メートル} $ため、またあるいは$ \ SQRT {2メートル} $に等しく、そして$より左側の点の度合ためよりも左を指しX $大

その後度の総数は明らかに以上$ 2メートル$であるので、これは発生してはなりません

図ポテンシャルエネルギーのエッジの数は、$ Mは$に全ての点、最初の初期グラフの最大電位図の点で右に向けられている定義します

以前ポイントの$ X $の各完全な動作の後、$ X $は$ \右に左右($のXの$ポインティングに向けSQRT {2メートル} $縁に任されていることを実証から得ることができます。各図増加$ \のSQRT {2メートル} $、最大の最終的な総エネルギー$ M + Q \ SQRT {2メートル} $のポテンシャルを最大限に行うように側)、左点となっています

そう右向き逆に左側から最初の点(すなわち、ポテンシャルエネルギーを増加させる)$ M + Q \ SQRT {2メートル} $までです

ポテンシャルエネルギーの大半が消費されるので、また、我々は右を指してから左側を指しなりたい場合は、その後、我々は潜在的なエネルギー消費量を把握しなければならないことが、また、理由までの合計量の増加の可能性の$ M + Q \ SQRT {2メートル} $を見つけました$のM + q個の\ SQRT {2メートル} $

したがって、$ O(M + Q \ {2メートル} SQRT)の逆側の、合計複雑$

QED

#include <iostreamの> 
する#include <cstdioを> 
する#include <アルゴリズム> 
の#include <CStringの> 
する#include <cmath> 
の#include <ベクトル>
 使用して 名前空間STD。
typedefの長い 長いLL。
インラインint型リード()
{ 
    int型のx = 0、F = 1チャー CH = GETCHAR()。
    一方、(CH < ' 0 ' || CH> ' 9 '){ 場合(CH == ' - '1 ; CH = GETCHAR()。}
     一方、(CH> = ' 0 ' && CH <= ' 9 '){X =(X << 1)+(X << 3)+(CH ^ 48)。CH = GETCHAR()。}
     戻りのx *のF。
} 
のconst  int型 N = 2E5 + 7 INTの N、M、デュ[N]、アウト[N]。
アンスLL; 
ベクター < INT > V [N]。
インラインLL計算値(int型 I){ 戻り 1LLの* アウト [I] *(DU [I] - アウト[I])。}
INT ()は、メイン
{ 
    N =読み取る()、M =読み取ります(); int型、B;
    int型 iは= 1 ; I <= M; iが++ 
    { = read()は、B =(読み取り)、デュ[A] ++、デュ[B] ++ ;
        もし(> b)のスワップ(B)
        V [A] .push_back(B)。アウト [A] ++ ; 
    } 
    のためにint型 I = 1回答+ = iは++; iがn = <)CALC(I)。
    printf(" %LLDする\ n " 、ANS)。
    int型 Q = 読んで();
    以下のためのint型i = 1 ; iが<= Q; iは++ 
    { 
        A =リード()。INT LEN = V [A] .size()。
        INTの J = 1 ; J <= LENあり、j ++ 
        { 
            B = V [A] [len- J]。V [A] .pop_back()。
            V [B] .push_back(A)。
            ANS - = CALC(A)+ 計算値(B)。
            アウト [A] - 。アウト [B] ++ ; 
            ANS + = CALC(A)+ 計算値(B)。
        } 
        のprintf(" %LLDする\ n " 、ANS)。
    }
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/LLTYYC/p/11580886.html