牛
制限時間: 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 。
各牛について、どのように多くの牛は彼女よりも強いですか?ファーマージョンはあなたの助けを必要としています!
ファーマージョンは(我々は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(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 }