題目描述有 n個元素,第 i個元素有 ai,
bi,c
ia_i,b_i,c_i
ai,bi
,ci
三個屬性,設 f(i
)f(i)
f(i)
表示滿足 aj≤
ai且b
j≤bi
且cj≤
ci
a_j \leq a_i 且 b_j \leq b_i 且c_j \leq c_i
aj≤ai
且bj
≤bi
且cj
≤ci
的 j 的數量。
對於 d∈[
0,n)
d \in [0, n)
d∈[0,n
),求 f(i
)=
df(i)=d
f(i)=d
的數量輸入格式
第一行兩個整數 n、k,分別表示元素數量和最大屬性值。
之後 n 行,每行三個整數 ai
,bi,
ci
a_i,b_i ,c_i
ai,b
i,c
i,分別表示三個屬性值。
輸出格式
輸出 n 行,第 d+1 行表示 f(i
)=
df(i) = d
f(i)=d
的 i 的數量。
輸入輸出樣例輸入 #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 1
輸出 #1313010
1001
說明/提示1 ≤n
≤100000,1
≤k
≤200000
1 \leq n \leq 100000, 1 \leq k \leq 200000
1≤n≤10
0000
,1≤k
≤200
000
#include#include#include#include#define maxn 100010
using namespace std;
int n,k,ans[maxn]=,d[maxn]=;
struct node
bool operator==(const node &a) const
}a[maxn],b[maxn],c[maxn];
inline bool cmp(const node &a, const node &b)
}for(int i=l;i<=r;++i)b[i]=c[i];
}void merge1(int l,int r)
for(int i=l;i<=r;++i)a[i]=b[i];
merge2(l,r);
}int main()
洛谷3810 三維偏序
對於n個元素,第i個元素有ai,bi,ci三個屬性,f i 表示滿足aj ai,bj bi,cj ci的j i不等於j 的個數,對於在區間 0,n 1 的d,輸出f i d的i的數量。n 100000 10 3 3 3 3 2 3 3 2 3 1 3 1 1 3 1 2 1 3 1 1 1 2 1 ...
P3810 模板 三維偏序(陌上花開)
傳送門 洛谷 哇塞大佬好厲害 據說正解是一維排序,二維cdq,三維樹狀陣列的 然而大佬硬是二維三維都用了cdq 而且莫名好寫 太暴力了 1 minamoto 2 include3 include4 include5 using std sort 6 define getc p1 p2 p2 p1 b...
P3810 模板 三維偏序(陌上花開)
這是一道模板題 可以使用bitset,cdq分治,k dtree等方式解決。有 nn 個元素,第 ii 個元素有 a iai b ibi c ici 三個屬性,設 f i f i 表示滿足 a j leq a iaj ai 且 b j leq b ibj bi 且 c j leq c icj ci ...