3262:Moの花
制限時間:20秒 メモリ制限:256メガバイトの提出:5433 解決:2623
[ 送信 ] [ ステータス ] [ 議論 ]
説明
フラワー(S)、色(C)、臭気(M)、三つの整数で表される:N-花は、それぞれの花は3つの属性を有しています。
今、それぞれの花の評価のために、花のレベルは、それが美しさを超えることができた花の数です。
Bより美しい別の花の花の定義は、場合にのみサ> = Sbのカリフォルニア州> = Cbの、馬> = Mbの。
明らかに、2つの花は同じ属性を有することができます。各クラスのために必要な花の数のトップ統計。
入力
最初の行のN、K(1 <= N <= 10万、1 <= K <=20万)、それぞれ、花の最大数は、属性値。
三つの整数のSI、CIの次のNライン、MI(1 <= SI、CI、MI <= K)は、iが属性の花を表します
出力
それぞれ、N個の行を含む、数はN-1 ... 0の花の各段階の評価ことを示しています。
サンプル入力
3 10
3 3 3
2 3 3
2 3 1
3 1 1
3 1 2
1 3 1
1 1 2
1 2 2
1 3 2
1 2 1
3 3 3
2 3 3
2 3 1
3 1 1
3 1 2
1 3 1
1 1 2
1 2 2
1 3 2
1 2 1
サンプル出力
3
1
3
0
1
0
1
0
0
1
1
3
0
1
0
1
0
0
1
ヒント
ソース
最初の3次元部分オーダーコードCDQ
#include <ビット/ STDC ++ H> に#defineっ長い長 の#define LSONのL、M、RT << 1つ の#define rsonのM + 1、R、RT << 1 | 1つ の#define 0x3f3f3f3f INF の#defineのEPS 1E-6 使用して 名前空間はstdを、 const int型 MAXN = 100005 ; 構造体ノード{ int型X、Y、Z、CNT、ANS。 } P [MAXN]。 int型のツリー[MAXN * 2 ]、K、ANS [MAXN]。 INT lowbit(INT X){ 戻り X&( - X)。 } ブール cmpx(CONSTノードU、CONSTノードv){ 場合(UX == VX && u.y == VY) を返す UZ < VZ。 もし(UX == VX) の戻り UY < VY。 返す UX < VX。 } ブール cmpy(CONSTノードU、CONST ノードv){ 場合(UY == VY && u.z == VZ) を返す UX < VXと、 もし(UY == VY) を返す UZ < VZ。 リターン UY < VY。 } 無効アドオン(int型X、int型のval){ 一方(X <= K){ ツリー[X] + = ヴァル。 X + = lowbit(X)。 } } int型の照会(INT X){ int型 ANS = 0 。 一方、(X){ ANS + = ツリー[X]。 X - = lowbit(X)。 } 戻りANS。 } ボイド CDQ(int型 L、INT R){ 場合(L == R){ P [L] .ans + = P [L] .cnt- 1; 返します。 } INT M =(L + R)>> 1 。 CDQ(L、M)。 CDQ(M + 1 、R)。 ソート(P + L、P + 1 + M、cmpy)。 ソート(P + 1 + M、P + 1 + R、cmpy)。 int型 J = リットル; 以下のために(int型 I = M + 1 ; I <= R; iは++ ){ 一方(J <= M && P [j]が.Y <= P [i]は.Y){ 追加(P [j]が.Z、P [J] .CNT); J ++ ; } P [i]は.ans+ = クエリ(P [i]の.Z)。 } のために(int型 I = 1と、iがjで<; iは++ ) (P [i]が.Z、追加 - P [I] .CNT)を、 } int型のmain(){ int型 N、TOT = 0 。 scanf関数(" %d個の%のD "、&N&K)。 以下のために(int型 i = 1 ; iが<= N; iは++ ){ scanf関数(" %D%D%D "、&P [i]は.X、&P [i]は.Y、&P [i]の.Z)。 P [i]は.ans = 1 。 } ソート(P + 1、P + 1+ N、cmpx)。 以下のために(int型 i = 1 ; iは= N <; iは++ ){ もし!(I = 1つの && P [i]は.X == P [I- 1 ] .X && P [i]は.Y == P [I- 1 ] .Y && P [i]は.Z == P [I- 1 ] .Z){ P [TOT] .CNT ++ 。 } 他{ P [ ++ TOT] = P [i]は、 P [TOT] .CNT = 1 。 } } CDQ(1 、TOT)。 以下のために(int型 I = 1 ; I <= TOT; iは++ ){ ANS [P [i]は.ans] + = P [i]は.CNT。 } のために(int型 I = 1を iが++; iが<= N ){ COUT << ANS [I] << " の\ n " 。 } 戻り 0 。 }