POJ-2352.Stats(フェンウィックツリーシンプルなアプリケーション)

スター

制限時間:  1000ミリ秒   メモリの制限:  65536kも
合計提出:  58255   受け入れ:  24860

説明

天文学者は、多くの場合、星は平面上の点で表され、各星がデカルト座標を持っているスターマップを調べます。スターのレベルが与えられた星の右側に高くないとされない星の量とします。天文学者は星のレベルの分布を知りたいです。 

例えば、上の図に示すマップを見てください。スター番号5のレベルは、(それが3つの数字1つ星、2及び4によって形成されています)3です。そして、2と4によって番号星のレベルは、このマップでは1である。あるレベル0の唯一のスター、レベル1の2つの星、レベル2の1星、およびレベル3の1スター 

ます指定されたマップ上の各レベルの星の量をカウントするプログラムを書くことです。

入力

入力ファイルの最初の行は、N(1 <= N <= 15000)星の数を含んでいます。次のNラインが星の座標を記述する(スペースで区切られた行ごとに2つの整数XとY、0 <= X、Y <= 32000)。平面の一点に1つだけ星が存在する場合があります。星は、Y座標の小さい順にリストされています。同じY座標を有する星X座標の昇順にリストされています。 

出力

出力はN行、1行に1つの番号を含める必要があります。最初の行は、第二のレベル1件の量を行うというように、最後の行は、レベルN-1件の量が含まれ、レベル0の星の量を含有します。

サンプル入力

5 
1 
5 1 
7 1 
3 3 
5

サンプル出力

1 
2 
1 
1 
0

ヒント

この問題は、制限時間を超え避けるためにデータを読み出す代わりに、CINの巨大な入力データ、使用のscanf()を有しています。

ソース

 
いくつかの単語の男は、コードの中で述べて..
/ * 
    読む知っているのは非常に簡単だった、私はのみj.time満たす必要があり、それぞれ1スター <i.time  j.row <= スターたちは、これは単なる入力順であることを知っている質問の意味を依存し、i.rowことができます。
    私たちは、唯一の星の前に置いたものを選択して、彼の星に以下の行する必要があります。
    だから我々はi.rowは、番号jの挿入前に分離することができますrow.i挿入することができます。< row.jの数
  * /
 含まれ<cstdioを> 
;使用して名前空間のSTD 

のconst int型MAXN = 32000 + 5。; 
int型N- 、C [MAXN]、ANS [MAXN]; 

int型lowbit(INT X){ 
    戻り X&( - X); 
} 

追加を無効(int型X、int型D){ 
    一方(X <= MAXN){ 
        C [X] + = D; 
        X + = lowbit(X); 
    }
}

INTクエリ(INT X){ 
    int型の和 = 0。
    一方、(X> 0){ 
        合計 + = C [X]。
        X - = lowbit(X)。
    } 
    戻り値の和。
} 

int型のmain(){ 
    int型X、Y。
    scanf関数(" %のD "、&N)
    ため(I 0 = int型、iがN <; Iは++ ){ 
        scanf関数(" %D%D "、およびX&Y)。
        X + = 1 ; 
        ANS [クエリ(X)] ++ ; 
        追加(X、 1); 
    } 
    ため(I = 0 int型、iがN <; Iは++ ){ 
        のprintf(" %d個の\ n " 、ANS [I])。
    } 
    戻り0。
}

 

 
 

おすすめ

転載: www.cnblogs.com/bianjunting/p/11236368.html