羅区P2468 [SDOI2010]キビのキビの本棚

来来て、ちょうど問題に内接解決策をドラッグ[霧]

最近では、奇数貧しい基本的なことは、レビュー、私はほぼ完全に学び、その後、羅区のフィールドトライアルを開けませんでした木の会長を開始する前に学んだ自分自身を発見しました...

私はそのようなコンボのタイトルを見つけました。

 

実際には、この問題は、最初は50%で、他のチャンネルの後、50%の問題である、2つの部分に分割されます。観測データの範囲は、我々は、二つの範囲が大きく異なる気づい対象としているように見えるので、分離したいです。

よく見ると、1000以下のp個のページの範囲は、単一の蛾アウトすることができるものの範囲内のことを暗示しているようです。

マトリックス、C、及びRの発行前に、50%未満200に等しいです。(i、j)の発生回数と累積内 - 特定の高さの長方形内の要求のCouchu対象は、単に非常に小さな範囲は、2次元のプレフィックスとは、(1,1)の高さに何各ページを記録することが考えられます高さは、O(CRP)の時間複雑。次に、範囲Pが下降ページの高さとO(P)の累積時間複雑さの数の各質問のため。

50%R = 1後、シーケンスが問題となります。高さ範囲要する期間にわたってCouchu要件ページがまだ列挙高さ下降した場合、前処理の複雑さは許容できません。しかし、データのプラスまたはマイナス範囲の全範囲の一定期間、これは木の理事長である... Oの時間複雑(nlogn)、スペースの複雑さO(nlogn)

私は鍋のうち照会した後、木の未熟練会長を書くようになっています。再帰クエリは、リーフノードになっている接頭辞と何ページのこの種は、あなたが答えを生成するためにどのように多く、どの程度の貢献に参加したい上述したように、それは次のようにする必要があります。しかし、私は私に長い時間が立ち往生している第二の試料が得られ、直接リターン1アップと呼ばれます...

 

コード:

書式#include <iostreamの> 
の#include <cstdioを>
 使用して 名前空間はstdを、
INT R、C、M、X1、X2、Y1、Y2、
INT CNT [ 210 ] [ 210 ] [ 1010 ]、ANS。
長い 長い和[ 210 ] [ 210 ] [ 1010 ]、H、NUM。

const  int型のログ= 20 ;
INT T [ 500010 ]、L [ 500010 *ログ]、R [ 500010 *ログ]、SUM [ 500010 *ログ]、CNT [ 500010 * ログ]。
int型のTOT;
空隙ビルド(INT&P、int型の L、int型R){ 
    P = ++ TOT。
    もし(L == R)のリターン;
    INT半ば=(L + R)/ 2 
    (L [P]、L、中間)を構築します。
    ビルド(R [P]、ミッド + 1 、R)。
} 
ボイド更新(INT&P、INTプリ、int型の L、int型の R、INT X){ 
    P = ++ TOT。
    L [P] Lが= [事前]、R [P] R [事前]、CNT [P] = CNT [事前] + = 1、SUM [P] = SUMを[事前] + X。
    もし(L == R)のリターン;
    INT半ば=(L + R)/ 2 もし(x <= MID)更新(L [P]、L [事前]、L、中、X)。
    他の更新(R [P]、R [事前]、ミッド+ 1 、R、X)。
} 
int型の照会(int型のx、int型の Y、int型の L、int型の R、長い 長い時間){
     int型ミッド=(L + R)/ 2 もし(L == R){
         場合(H%さL == 0戻り H / L。
         戻り H / L + 1; 
    } 
    int型のval = 0 ;
    もし(SUM [R [Y] - SUM [R [X]]> = H)戻りクエリ(R [x]は、R [Y]、ミッド+ 1 、R、H)。
    そう であれば(SUM [R [Y] - SUM [R [X]] == H)戻り CNT [Rを[Y] - CNT [Rの[X]]。
    { 
        ヴァル + = CNT [R [Y] - CNT [R [] X]。
        戻りヴァル+クエリ(Lを[X]、L [Y]、L、中間、H-SUM [R [Y] + SUM [R [X]])。
    } 
} 
int型のmain()
{ 
    scanf関数(" %D%D%D "、&​​R&C&M)。
    もし(式中、R == 1){
        ビルド(T [ 0 ]、11000年)。
        int型 iは= 1、X; I <= C; iが++ ){ 
            scanf関数(" %のD "、&x)は、
            更新(T [I]、T [I - 1 ]、11000年、X)。
        } 
        のためにint型 I = 1 ; I <= M; iは++ ){ 
            scanf関数(" %D%D%D%D%LLD "、&​​X1、Y1&&X2、&Y2&H)。
            NUM = 0、ANS = 0;
            もし(SUM [T [Y2] - SUM [T [Y1- 1 ] <H)のprintf(" 悪いQLWの\ n " );
            { 
                ANS =クエリ(T [Y1- 1 ]、T [Y2]、11000年、H)。
                printf(" %d個の\ n " 、ANS)。
            } 
        } 
    } 
    {
         ためint型 I = 1 ; I <= R; iは++ ){
             ためint型の J = 1、X; J <= C; J ++ ){ 
                のscanf(" %のD "、&x)は、
                int型 P = 1 ; p <= 1000年 ; P ++ ){ 
                    CNT [I] [J] [P] = CNT [I]、[J- 1 ] [P] + CNT [I- 1 ] [j]を[P ] -cnt [I- 1 ] [J- 1 ] [P]。
                    和[I] [J] [P] =和[I]、[J- 1 ] [P] +和[I- 1 ] [j]を[P] -sum [I- 1 ] [J- 1 ] [P ]; 
                } 
                CNT [I] [J] [X] ++ ; 
                和[I] [J] [X] + =バツ; 
            }
        } 
        のためにint型 I = 1 ; I <= M; iは++ ){ 
            scanf関数(" %D%D%D%D%LLD "、&​​X1、Y1&&X2、&Y2&H)。
            NUM = 0、ANS = 0 INT P = 1000年 ; P> = 1 ; P-- ){
                 場合(NUM +和[X2] [Y2] [P] +和[X1- 1 ] [Y1- 1 ] [P] -sum [X2 ] [Y1- 1 ] [P] -sum [X1- 1 ] [Y2] [P]> = H){
                     長い 長い CHA = H-確かに、
                    もし(!(チャ%P)){ 
                        ANS + CHA / P。
                    } 
                    エルス{ 
                        ANS + CHA / P + 1 
                    } 
                    確か + I = [X2] [J2] [J] + M [X1- 1 ] [Y1- 1 ] [J] -sum [X2] [Y1- 1 ] [J] -sum [X1- 1 ] [ Y2] [J]。
                    破ります; 
                } 
                エルス{ 
                    確か + I = [X2] [J2] [J] + M [X1- 1 ] [Y1- 1 ] [J] -sum [X2] [Y1- 1] [P] -sum [X1- 1 ] [Y2] [P]。
                    ANS + = CNT [X2] [Y2] [P] + CNT [X1- 1 ] [Y1- 1 ] [P] -cnt [X2] [Y1- 1 ] [P] -cnt [X1- 1 ] [Y2 ] [P]。
                } 
            } 
            もし(NUM> = H)のprintf(" %d個の\ n " 、ANS)。
            のprintf(" 悪いQLW \ nを" ); 
        } 
    } 
    戻り 0 
}

 

おすすめ

転載: www.cnblogs.com/chloris/p/11515326.html