有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的每級花的數量。
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 131
3010
1001
solution
cdq分治模板題。
一維偏序用cdq解決就是歸併排序。
對於二維偏序,一維排序,一維樹狀陣列統計(也可以cdq)
三維偏序則排序+cdq+樹狀陣列
舉例:當我保證a有序時,把l~mid,mid+1~r分治,統計好各自的答案
合併時,把左右都按b排序,用兩個指標,維護可以向右轉移的左節點,即b(left)<=b(right)
離散化寫錯調了一早上,氣死
#include#include#include#include#include#include#define maxn 100005
using namespace std;
int n,max,tot,tree[maxn*2],cnt[maxn];
struct nodess[maxn],s[maxn];
bool a(node aa,node bb)
for(int i=l;i>n>>max;
for(int i=1;i<=n;i++)scanf("%d%d%d",&ss[i].a,&ss[i].b,&ss[i].c);
sort(ss+1,ss+n+1,a);
s[1]=ss[1];tot=1;s[1].v=1;
for(int i=2;i<=n;i++)
//for(int i=1;i<=n;i++)cout
for(int i=1;i<=tot;i++)
for(int i=0;ireturn 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 樹狀陣列 秒掉,...