BZOJ3262 陌上花開

2022-05-09 17:39:13 字數 1931 閱讀 6782

[bzoj3262]陌上花開

試題描述

有n朵花,每朵花有三個屬性:花形(s)、顏色(c)、氣味(m),又三個整數表示。現要對每朵花評級,一朵花的級別是它擁有的美麗能超過的花的數量。定義一朵花a比另一朵花b要美麗,當且僅當sa>=sb,ca>=cb,ma>=mb。顯然,兩朵花可能有同樣的屬性。需要統計出評出每個等級的花的數量。

輸入

第一行為n,k (1 <= n <= 100,000, 1 <= k <= 200,000 ), 分別表示花的數量和最大屬性值。

以下n行,每行三個整數si, ci, mi (1 <= si, ci, mi <= k),表示第i朵花的屬性

輸出

包含n行,分別表示評級為0...n-1的每級花的數量。

輸入示例

1033

3323

3231

3113

1213

1112

1221

3212

1

輸出示例

313

0101

001

資料規模及約定

1 <= n <= 100,000, 1 <= k <= 200,000

題解

三維問題,第一維排序,第二維樹狀陣列,第三維平衡樹。然後慢得飛起。。。以後再用 kd 樹切一切試試。。。哦對了這題有坑,需要判一判重合點的情況。

#include #include #include #include #include #include using namespace std;

int read()

while(isdigit(c))

return x * f;

}#define maxn 200010

#define maxnode 3600010

struct node

node(int _, int __): v(_), r(__) {}

} ns[maxnode];

int tot, fa[maxnode], ch[2][maxnode];

void maintain(int o)

void rotate(int u)

void insert(int& o, int v)

bool d = v > ns[o].v;

insert(ch[d][o], v); fa[ch[d][o]] = o;

if(ns[ch[d][o]].r > ns[o].r)

return maintain(o);

}int que(int& o, int v)

int k, rt[maxn];

void add(int x, int y)

int query(int x, int y)

struct flw

flw(int _1, int _2, int _3): x(_1), y(_2), z(_3) {}

bool operator < (const flw& t) const

} fs[maxn];

int ans[maxn];

int main()

sort(fs + 1, fs + n + 1);

int tmp = 1;

for(int i = 1; i <= n; i++)

else tmp++;

add(fs[i].y, fs[i].z); }

for(int i = 0; i < n; i++) printf("%d\n", ans[i]);

return 0;

}

BZOJ3262 陌上花開

description 有n朵花,每朵花有三個屬性 花形 s 顏色 c 氣味 m 又三個整數表示。現要對每朵花評級,一朵花的級別是它擁有的美麗能超過的花的數量。定義一朵花a比另一朵花b要美麗,當且僅當sa sb,ca cb,ma mb。顯然,兩朵花可能有同樣的屬性。需要統計出評出每個等級的花的數量。...

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 樹狀陣列 秒掉,...