傳送門(洛谷)
哇塞大佬好厲害
據說正解是一維排序,二維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分治 先三關鍵字排序 然後把第二關鍵字歸併排序 在合併子區間時用 第三關鍵字的權值樹狀樹組 算出子區間的答案 為什麼可以這樣搞呢 首先第一維已經有序 所以只要考慮左邊對右邊的影響 把第二維歸併時 左子區間的第一二關鍵字 全部小於或等於 右子區間的第一二關鍵字 所以也只要考慮左邊對右邊的...