P3810 模板 三維偏序(陌上花開)

2022-03-01 15:22:41 字數 1263 閱讀 7791

傳送門(洛谷)

哇塞大佬好厲害

據說正解是一維排序,二維cdq,三維樹狀陣列的……

然而大佬硬是二維三維都用了cdq……

而且莫名好寫……太暴力了……

1

//minamoto

2 #include3 #include4 #include5

using

std::sort;

6#define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?eof:*p1++)

7char buf[1

<<21],*p1=buf,*p2=buf;

8 inline int

read()

18char sr[1

<<21],z[20];int c=-1

,z;19 inline void ot()

20 inline void print(int

x)25

const

int n=100005;26

intn,k,ans[n],d[n];

27struct

node

33 inline bool

operator ==(const node &a)const

34

35}a[n],b[n],c[n];

36 inline bool cmp(const node &a,const node &b)

39void merge2(int l,int

r)48

else

52 ++i;53}

54while(j<=mid)

55 c[i]=b[j++],++i;

56while(k<=r)

61for(int i=l;i<=r;++i) b[i]=c[i];62}

63void merge1(int l,int

r)72

else

75 ++i;76}

77while(j<=mid)

78 b[i]=a[j++],b[i].b=1,++i;

79while(k<=r)

80 b[i]=a[k++],b[i].b=0,++i;

81for(int i=l;i<=r;++i) a[i]=b[i];

82merge2(l,r);83}

84int

main()

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

P3810 模板 三維偏序(陌上花開)

有 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 的 jj 的數量。對於 d in 0,n d 0,n 求 f i df i ...

P3810 模板 三維偏序(陌上花開)

傳送門 cdq分治 先三關鍵字排序 然後把第二關鍵字歸併排序 在合併子區間時用 第三關鍵字的權值樹狀樹組 算出子區間的答案 為什麼可以這樣搞呢 首先第一維已經有序 所以只要考慮左邊對右邊的影響 把第二維歸併時 左子區間的第一二關鍵字 全部小於或等於 右子區間的第一二關鍵字 所以也只要考慮左邊對右邊的...