羅区1309:スイスラウンド - 問題への解決策

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

私はおそらくZZを持っていると思うし、タイトルの人気は不快、問題への解決策を確認しなければならないのではないでしょう。

の$ O(rnlogn)$があまりにも確認することはできません(意味無し後)

確かにシーケンスを降りてくることができます複雑さはパターンがあります。

だから、常にアッパーブラケットと下側ブラケット自分の単調減少を見つけることができます。

次に、2つのアッパーブラケットとラインの下側ブラケットの合併を命じ、ほとんどソートマージ置きます。

私のIQは、風にキャンドルを持っています。

#include <地図>  
の#include <cmath> 
の#include <キュー> 
の#include <cstdioを> 
する#include <ベクトル> 
の#include <CStringの> 
する#include <iostreamの> 
する#include <アルゴリズム>
 使用して 名前空間STD。
typedefの長い 長いLL。
CONSTの INT N = 2E5 + 5 
インラインint型リード(){
     int型 X = 0、W = 0CHAR CH = 0 しばらく(!isdigit(CH)){W | = CH == " -' ; CH = GETCHAR();}
     ながら(isdigit(CH))X =(X << 3)+(X << 1)+(CH ^ 48)、CH = GETCHAR()。
    リターン?W - X:X; 
} 
構造体人{
     int型の、ID、W。
} [N]、B [N]、[N] C。
int型、N、R、Q。
BOOL CMP(人Xと人Y){
     場合(XSは== YS)を返す x.id < y.id。
    返す XS> YSを。
} 
ボイドmsort(){
     ためint型 I = 1、J = 1 ; I <=2 * N; I + = 2、J ++ ){
         場合([i]は.W> [I + 1 ] .W){ 
            B [j]は [I] =; B [j]は++ .S 
            C [j]は = [I + 1 ]。
        } { 
            B [j]は [I + = 1 ]、B [j]は++ .S 
            C [j]は = [I]を、
        } 
    } 
    のためのint型 I = 1、J = 1、K = 1 ; iが= < 2 iが++; * N ){
         もし(j <= N &&(K> N ||(B [j]は.S> C [k]は||(B [j]は.S == C .S [k]は&& B [J] .ID <C .S K] .ID))))[I] = bの[J ++ ]。
         [I] = Cを[K ++ ]。
    } 
} 
INT {main()の
    N =(読み取り); R =リード(); Q = 読み取り()。
    以下のためにint型 i = 1 ; iが<= 2 * N; I ++ ){ 
        [i]は.Sの =は、READ(); 
        [I] .ID = iは、
    } 
    のためにint型 i = 1 ; iが<= 2 * N; I ++)[I] .W。= READ(); 
    ソート(A + 1、A + 2 * N +1 、CMP)。
    以下のためにint型 I = 1 ; I <= R; iは++ ){ 
        msort()。
    } 
    のprintf(" %dの" 、[Q] .ID)。
    リターン 0 ; 
}

+++++++++++++++++++++++++++++++++++++++++++

 +著者:luyouqi233。+

 +私のブログへようこそ:http://www.cnblogs.com/luyouqi233/ +

+++++++++++++++++++++++++++++++++++++++++++

おすすめ

転載: www.cnblogs.com/luyouqi233/p/11312027.html