洛谷 3810 模板 三維偏序(陌上花開)

2021-09-26 04:28:35 字數 1640 閱讀 6522

題目描述

有 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

輸出 #131

3010

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 ...