有 n 個元素,第 i 個元素有 \(a_i 、b_i 、c_i\) 三個屬性,設 f(i) 表示滿足 \(a_j \leq a_i 且 b_j \leq b_i 且 c_j \leq c_i\) 的 j 的數量。
對於 \(d \in [0, n)\) ,求 \(f(i) = d\) 的數量
第一行兩個整數 n、 k,分別表示元素數量和最大屬性值。
之後 n 行,每行三個整數 \(a_i 、b_i 、c_i\) ,分別表示三個屬性值。
輸出 n 行,第 \(d + 1\) 行表示 \(f(i) = d\) 的 i 的數量。
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
313
0101
001
\(1\leq n \leq 100000,1\leq k\leq 200000\)
cdq 分治
對序列分治,每次統計左區間每個元素對於右區間每個元素的貢獻
首先分別以x,y,z為1,2,3關鍵字排序
那麼現在x是有序的
然後對序列cdq分治,每次把左右區間按y,z排序
這樣保證了左區間所有x\(\leq\)右區間所有x,且左右區間y有序
維護左區間的指標,for右區間每乙個元素,只要左區間指標的元素y比當前小,就在權值樹狀陣列上以z為下標++
然後用當前的z收集ans
注意千萬不要單開ans陣列收集答案
因為當前元素在每次sort後會變成其他的,這樣收集就亂了
最後開桶統計即可
#include#include#include#include#include#include#include#include#define _ 0
#define ll long long
#define space putchar(' ')
#define enter putchar('\n')
#define fuu(x,y,z) for(int x=(y),x##end=z;x<=x##end;x++)
#define fu(x,y,z) for(int x=(y),x##end=z;x=x##end;x--)
#define fd(x,y,z) for(int x=(y),x##end=z;x>x##end;x--)
#define mem(x,y) memset(x,y,sizeof(x))
#ifndef olinr
inline char getc()
#else
#define getc() getchar()
#endif
templateinline void in(t &x)
int n,k;
struct bit
inline int query(int pos)
};struct node
}e[300000];
bit t;
int ans[300000];
inline void cdq(int l,int r)
); std::sort(e+mid+1,e+r+1,(const node &a,const node &b));
int now=l;
fuu(i,mid+1,r)
fuu(i,l,now-1) t.add(e[i].z,-e[i].num);
}int main()
); int tmp=0;
//去重,相同的壓一起(跟自己相同的算在ans的一部分,但自己對自己無貢獻)
fuu(i,1,n)
cdq(1,tmp);
//ans裡面套的是當前元素的答案(要加上相同的-自己)
//外面因為跟自己相同的都是成立的,所以+=個數
fuu(i,1,tmp) ans[e[i].ans+e[i].num-1]+=e[i].num;
fuu(i,0,n-1) printf("%d\n",ans[i]);
return ~~(0^_^0);
}
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 ...
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 ...