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