BZOJ 3262 陌上花開

2021-10-07 22:05:57 字數 1472 閱讀 4915

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

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

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

cdq分治經典題目,求解三維偏序問題

cdq分治與普通分治法的區別在於:普通分治法分為兩個區間互不影響,cdq分治左區間隊有區間產生影響,有區間隊左區間無影響,需額外計算左區間隊右區間的影響。

cdq分治

參考題解

#include

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

#define de(x) cout<<#x<<

" = "

<

using

namespace std;

typedef long

long ll;

const ll maxn=

2e5+10;

ll tree[maxn]

;//樹狀陣列

ll ans[maxn]

;struct nodea[maxn]

;bool

cmpx

(node a,node b)

bool

cmpy

(node a,node b)

void

update

(ll x,ll val)

}ll query

(ll x)

return sum;

}void

cdq(ll l,ll r)

ll mid=

(l+r)

>

>1;

cdq(l,mid)

;cdq

(mid+

1,r)

;sort

(a+l,a+mid+

1,cmpy)

;sort

(a+mid+

1,a+r+

1,cmpy)

;//分別按y排序

ll j=l;

for(ll i=mid+

1;i<=r;i++

) a[i]

.ans+

=query

(a[i]

.z);

}for

(ll i=l;iintmain()

sort

(a+1

,a+1

+n,cmpx)

; ll tot=0;

for(ll i=

1;i<=n;i++

)cdq(1

,tot)

;for

(ll i=

1;i<=tot;i++

)for

(ll i=

0;i)}

提交不了**,樣例過了就算過了吧

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