BZOJ 3262 陌上花開(CDQ分治)

2021-08-08 13:30:21 字數 2042 閱讀 1956

time limit: 20 sec  

memory limit: 256 mb

submit: 2493  

solved: 1113 [

submit][

status][

discuss]

有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

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

和 這個題賊像,解法也是一樣的,cdq分治模板。

唯一的不同是這道題的第三維並不是1到n的全排列,我們可以離散化一發,使得其為全排列,這樣便於在

cdq分治時找到中點並進行分治,還有乙個地方就是屬性相同時求數量時按照題目要求即可。。。

#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;            

#define ll __int64

#define inf 1000000000

#define mod 1000000007

#define maxn 800100

#define lowbit(x) (x&-x)

#define eps 1e-9

struct node

}a[maxn],q[maxn];

int ans[maxn],n,k,c[maxn];

void update(int x,int val)

}int query(int x)

return res;

}bool comp(node a,node b)

void cdq(int l,int r)

for(i=l;i<=r;i++)

if(a[i].z<=m)

update(a[i].y,-a[i].sum);

ls=l;rs=m+1;

for(i=l;i<=r;i++)

for(i=l;i<=r;i++)

a[i]=q[i];

cdq(l,m);cdq(m+1,r);

}int main(void)

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

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

a[++cnt]=a[i];

} sort(a+1,a+cnt+1,comp);

for(i=1;i<=cnt;i++)//將第三維離散化,變成1到cnt的全排列

a[i].z=i;

sort(a+1,a+cnt+1);

cdq(1,cnt);

for(i=1;i<=cnt;i++)

for(i=0;i<=n-1;i++)

printf("%d\n",ans[i]);

return 0;

}

BZOJ 3262 陌上花開 CDQ

time limit 20 sec memory limit 256 mb submit 2457 solved 1098 submit status discuss 有n朵花,每朵花有三個屬性 花形 s 顏色 c 氣味 m 又三個整數表示。現要對每朵花評級,一朵花的級別是它擁有的美麗能超過的花的數...

BZOJ3262 陌上花開 CDQ分治

對第一關鍵字排序,分治每朵花,合併的時候通過歸併左右的花的第二關鍵字,將值插入樹狀陣列中求值。對於相同的花,先進行預處理即可。include bits stdc h define lowbit x x x using namespace std const int n 100005,m 200005...

bzoj 3262 陌上花開(cdq分治)

time limit 20 sec memory limit 256 mb submit 1431 solved 644 submit status discuss 有n朵花,每朵花有三個屬性 花形 s 顏色 c 氣味 m 又三個整數表示。現要對每朵花評級,一朵花的級別是它擁有的美麗能超過的花的數量...