牛(フェンウィック木)

制限時間: 3000MS   メモリの制限: 65536kも
合計提出: 24787   受け入れ: 8296

説明

ファーマージョンの牛は、彼のフィールドに(私たちは一次元数直線として考えることができます)丘の稜線に沿って成長しているクローバーが特に良好であることを発見しました。

ファーマージョンは(我々は1からNまで牛を番号)N牛を持っています。ファーマージョンのN牛のそれぞれは、彼女が特に好きなクローバーの範囲を(これらの範囲が重複する可能性がある)があります。範囲は、閉区間[S、E]によって定義されます。

しかし、いくつかの牛が強く、一部は弱いです。2頭の牛を考える:牛 I と牛 jは 、自分の好きなクローバーの範囲は[Siの、Eiは]および[Sjと、Ejと]です。Siの場合は<= Sjとし、Ejと<= EiのとEiは-シリコン> Ejの- Sjのは、私たちは牛と言う 私は、 牛よりも強い J

各牛について、どのように多くの牛は彼女よりも強いですか?ファーマージョンはあなたの助けを必要としています!

入力

入力は複数のテストケースが含まれています。
各テストケースのために、最初の行は、整数N(1 <= N <= 10であり、 5 頭の牛の数です)。次いで、Nラインを来る、のi番目の2つの整数含ま:S及びE(0 <= S <E <= 10 5 )は、それぞれいくつかの牛によって好ましい範囲の始端の位置を特定します。場所は、尾根の開始からの距離として与えられています。

入力の終了は、単一の0を含んでいます。

出力

各テストケースのために、出力一行含むnスペースで区切られた整数、i番目の牛よりも強い牛の数を指定その Iを

サンプル入力

3 
1 2 
0 3 
3 4 
0

サンプル出力

1 0 0

ヒント

巨大な入力と出力、scanf関数やprintfのが推奨されます。

ソース

POJコンテスト 、著者:MathematicaのZSU @
 
ソリューションの概要:等しい場合Eは、この文のタイトルEiの場合に特に注意を払うように等しいSに応じて昇順に、次いで(条件を満足する)に従って降順にソート - 完全に等しいSjにあるの(場合 - のSi> Ejと)彼の!よりも強くありません
1の#include <iostreamの>
 2の#include <アルゴリズム>
 3の#include <CStringの>
 4の#include <cstdioを>
 5  使って 名前空間STD。
6  int型のn、X、Y。
7  のconst  int型 MAXN = 1E5 + 5 8  int型CNT [MAXN]、[MAXN] resは。
9  構造体ノード{ int型X、Y、ID。} A [MAXN]。
10  ブール CMP(ノードA、ノードB){ 場合(AY =によって!)戻り AY>によって、リターン斧< BX。}
 11件 のint lowbits(INT X){ 戻り X& - X。}
 12  空隙追加(INT X){ 一方(X <= MAXN)CNT [X] ++、X + = lowbits(X)。}
 13  INTクエリ(INT X){ int型の和= 0一方、(X> 0)合計+ = CNT [x]は、x軸= lowbits(X)。戻り値の合計。}
 14  
15  INT メイン(){
 16      ながら(scanf関数(" %のD "、&n)は、N){
 17          のmemset(CNT、0はsizeof(CNT))、memsetの(RES、0はsizeof (RES))。
18          のためにint型 I = 1のscanf(私は++; iが<= N)" %D%dの" = A [i]が.ID [i]が.Y、&A [i]が.X、&A)iは、
19          ソート(A + 1、A + 1 + N、CMP)。
20の          RES [A [ 1 ] .ID] = 0 ; 追加(A [ 1 ] .X + 1 )。
21          のためにint型 I = 2 ; iが<= N; iが++ ){
 22              場合([i]が.X == A [I- 1 ] && A [i]が.Y == A [I-.X 1] .Y)RES [A [i]が.ID] =のRES [A [I- 1 ] .ID]。
23の              RES [A [i]が.ID] =クエリ([I] .X + 1 )。
24              追加([I] .X + 1 )。
25          }
 26          のためのint型 i = 1 ; iがn = <; iは++ ){
 27              場合(I =!1)のprintf("  " )。
28              のprintf(" %dの" 、RES [I])。
29          }
 30          のprintf(" の\ n " );
31      }
 32     リターン 0 ;
33 }
コードの表示

 

おすすめ

転載: www.cnblogs.com/qq-1585047819/p/11420948.html