https://oj.neu.edu.cn/problem/1501
タイトルの意味:行列サイズ以上、主要道路からあなたに通じ、左から右へ、そしてこれらの点へのアクセスにはいくつかのポイントあなたに、最短の長さの一般的なラインをお願いします。
アイデア:私は一度だけ点について忘れる初めに、実際に、それは長さゼロのラインセグメントとして扱われるべきであり、その後、すべての点は、ソートで行われ、すべてのセグメントが、アレイに投入ラインセグメントの数、エンドポイント縦軸に変換することができます。縦軸は、メイン道路の数、+二つの主要な道路セグメントの長さと距離に対する各セグメントの寄与です。
#include <ビット/ STDC ++ H> に#define INT長い長い 名前空間stdを使用。 const int型MAXN = 200010; int型X、Y; 構造体の点{ int型X、Y。 } P [MAXN]。 int型ミリアンペア[MAXN]、MI [MAXN]は、[MAXN]目指します。 BOOL CMP(A点、B点){ 戻りAY <によって、 } (){主署名し ながら(CIN >> X >> Y){ memsetの(p、0、はsizeofのP)。 memsetの(MA、-1、はsizeofのMA); memsetの(MIはsizeof MI、0x3fを、)。 memsetの(のsizeof目指し、0を目指して)。 整数nを、X、Y。 cinを>> N; int型POS = 0; {ため(; iがn <I ++は、I = 0 INT) CIN >> P [i]は.X >> Pを[I] .Y。 MA [P [i]は.X = MAX(MA [Pを[I] .X]、P [I] .Y)。 MI [P [i]は.X] =分(MI [P [i]は.X]、P [I] .Y)。 } int型のCNT = 0。 (; I <100003; I = 0をint型私は++)のために{ 場合(MA [I] = - 1 && MI [I] = 0x3f3f3f3f!){ [I] [CNT ++] = MAを目指します。 目指す[CNT ++] = MI [i]は、 } } ソート(+ CNTを目指し、AIM)。 INT半ば=目指し[(CNT-1)/ 2]。 INT ANS = X-1。 {(; I <100003私は++ iが0 = INT)のために { - IF(!1 && MI [I] = 0x3f3f3f3f MA [I] =) ANS + = MA [I] -mi [I] + ABS(MID-MA [I])+ ABS(中間MI [I])。 } } COUT << ANS << ENDL。 } 0を返します。 }