P2698 [USACO12MAR]ポットFlowerpot--キューモノトーン

日常の問題に(コピー)ソリューションを参照するには、レコードの日。

https://www.luogu.org/problem/P2698

我々は増加し、行番号順の順序に従ってX座標ができるので、我々は、縦軸を残し、

横座標(L、R)間隔、最大値 - 最小値、縦軸はDより大きい場合、答えを更新することができます。

見成長Lとして、Rがインクリメントされなければなりません。

それは存在しない(L2、R2)、L2> L1とR2 <R、(MAXY-MINY)> Dを証明することができる、と回答に影響を与えることができます。

これが存在する場合、R 2 lが最初に一致したオブジェクトでなければならないので、答えは優れています。

 

これは、スライディングウィンドウ法を含みます。

座標最大垂直の記録位置、Q2 []最小垂直の記録位置座標[]とQL。

R&LTのLの範囲内;

キュー間隔の範囲を更新します。

一方、(H1 <= T1 && Q1 [H1] <L)H1 ++ 
一方、(H2 <= T2 && Q2 [H 2] <L)H2 ++。

 

R、最大値、最小値を更新します。

    一方、(。。[Q1 [H1] YA [Q2 [H 2] Y <D && R < N)
        {
             ++ R。
            一方([Q1 [T1] Y <[R] .Y && H1 <= T1。)t1-- 
            Q1 [ ++ T1] = R。
            一方([Q2 [T2] Y> [R] .Y && H2 <= T2)t2-- 
            Q2 [ ++ T2] = R。
        }

 

 

書式#include <cstdioを> 
する#include <CStringの> 
の#include <アルゴリズム>
 使用して 名前空間はstdを、
const  int型 MAXN = 1E6 + 10 INT Q1 [MAXN]、Q2 [MAXN]、H1 = 1、H2 = 1 、T1、T2。
int型nは、D;
構造体ノード
{ 
    int型X、Y。
} [MAXN]。
BOOL CMP(ノードQW、ノードWE)
{ 
    戻り <qw.x we.x。
} 
INT ANS = 2147483647 INT メイン()
{ 
    scanf関数(" %D%dの"、&​​N、&D)。
    以下のためにint型 i = 1 ; iが<= N; iは++ 
    { 
        scanf関数(" %d個の%のD "、および[I] .X、&[I] .Y)。
    } 
    ソート(A + 1、A + N + 1 、CMP)。
    int型、L = 1、R = 0 ; L <= N L ++ 
    { 
        一方(H1 <= T1 && Q1 [H1] <L)H1 ++ 一方、(H2 <= T2 && Q2 [H 2] <L)H2 ++ 一方([Q1 [H1]。YA [Q2 [H2]。Y <D && R <
            R;
            一方([Q1 [T1] Y <[R] .Y && H1 <= T1。)t1-- 
            Q1 [ ++ T1] = R。
            一方([Q2 [T2] Y> [R] .Y && H2 <= T2)t2-- 
            Q2 [ ++ T2] = R。
        } 
        であれば(。。[Q1 [H1] YA [Q2 [H 2] Y> = D)ANS =分(ANS、[R]は.x- [L] .X)。
    } 
    場合(ANS == 2147483647)のprintf(" -1 " )。
    のprintf(" %d個" 、ANS)。
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/WHFF521/p/11587822.html