description
有n朵花,每朵花有三個屬性:花形(s)、顏色(c)、氣味(m),又三個整數表示。現要對每朵花評級,一朵花的級別是它擁有的美麗能超過的花的數量。定義一朵花a比另一朵花b要美麗,當且僅當sa>=sb,ca>=cb,ma>=mb。顯然,兩朵花可能有同樣的屬性。需要統計出評出每個等級的花的數量。
input
第一行為n,k (1 <= n <= 100,000, 1 <= k <= 200,000 ), 分別表示花的數量和最大屬性值。
以下n行,每行三個整數si, ci, mi (1 <= si, ci, mi <= k),表示第i朵花的屬性
output
包含n行,分別表示評級為0…n-1的每級花的數量。
sample input
10 3
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
sample output
3 1
3description
有n朵花,每朵花有三個屬性:花形(s)、顏色(c)、氣味(m),又三個整數表示。現要對每朵花評級,一朵花的級別是它擁有的美麗能超過的花的數量。定義一朵花a比另一朵花b要美麗,當且僅當sa>=sb,ca>=cb,ma>=mb。顯然,兩朵花可能有同樣的屬性。需要統計出評出每個等級的花的數量。
input
第一行為n,k (1 <= n <= 100,000, 1 <= k <= 200,000 ), 分別表示花的數量和最大屬性值。
以下n行,每行三個整數si, ci, mi (1 <= si, ci, mi <= k),表示第i朵花的屬性
output
包含n行,分別表示評級為0…n-1的每級花的數量。
sample input
10 3
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
sample output
3 1
3 0
1 0
1 0
0 1
hint
1 <= n <= 100,000, 1 <= k <= 200,000
source
0 1
0 1
0 0
1 hint
1 <= n <= 100,000, 1 <= k <= 200,000
source
看見三維偏序肯定想cdq分治
把詢問重複的去掉之後開始分治
第一維排序第二維分治第三維建樹狀陣列然後對每個詢問求字首和就是比他小的詢問的數量.注意這個題對於相同的詢問是要計入評級的.
因為給定的k很小還省去了離散化的功夫,直接建20w的bit就行了
#include
#include
#include
#include
#include
#define maxn 100100
#define lowbit(x) (x&(-x))
using namespace std;
int n,k,cnt,top;
int c[maxn<<1];
int ans[maxn];
void in(int &x)
void add(int
x,int delta)
int query(int
x)struct query
}s[maxn],q[maxn];
bool cmp(query a,query b)
for (int i=l;iq[i].c,-q[i].num);
}int main()
solve(1,top);
for (int i=1;i<=top;i++) ans[q[i].sum+q[i].num-1]+=q[i].num;
for (int i=0;iprintf("%d\n",ans[i]);
}
BZOJ3262 陌上花開
description 有n朵花,每朵花有三個屬性 花形 s 顏色 c 氣味 m 又三個整數表示。現要對每朵花評級,一朵花的級別是它擁有的美麗能超過的花的數量。定義一朵花a比另一朵花b要美麗,當且僅當sa sb,ca cb,ma mb。顯然,兩朵花可能有同樣的屬性。需要統計出評出每個等級的花的數量。...
BZOJ 3262 陌上花開
話說這是一道許可權題,如果我複製過來,bzoj不會打死我吧?hhh 大意就是給三維空間中的很多點,乙個點p x,y,z 的級別定義為x0 x y0 y z0 z的任意點p0 x0,y0,z0 的數量,求每種級別的點各有多少種。看過一道二維的這樣的題目,當時想的是直接排序然後用bit 樹狀陣列 秒掉,...
bzoj3262 陌上花開
有n朵花,每朵花有三個屬性 花形 s 顏色 c 氣味 m 又三個整數表示。現要對每朵花評級,一朵花的級別是它擁有的美麗能超過的花的數量。定義一朵花a比另一朵花b要美麗,當且僅當sa sb,ca cb,ma mb。顯然,兩朵花可能有同樣的屬性。需要統計出評出每個等級的花的數量。第一行為n,k 1 n ...