傳送門
題解:cdq分治模板題。
一維排序,二維歸併,三維樹狀陣列。
核心思想是分治,即計算左邊區間對右邊區間的影響。
**如下:
#include using namespace std;
typedef long long ll;
const int n = 200005;
int n, k, m;
struct node
}a[n], b[n], d[n];
int ans[n], c[n], cnt[n];
vector v1, v2[n] ;
int lowbit(int x)
void add(int x, int v)
int query(int x)
void cdq(int l, int r) else
}for(int i = l; i <= mid; i++) add(a[i].z, -a[i].w);
for(int i = l; i <= r; i++) a[i] = b[i];
}int main()
sort(a + 1, a + n + 1);
int num = 1;
for(int i = 2; i <= n + 1; i++) else
}for(int i = 1; i <= m; i++) a[i] = d[i];
cdq(1, m);
for(int i = 1; i <= m; i++)
for(int i = 1; i <= n; i++) ans[cnt[i]]++;
for(int i = 0; i < n; i++) cout << ans[i] << '\n';
return 0;}/*
3 41 2 3
1 2 3
2 1 3
*/
P3810 陌上花開(CDQ分治)
題意 有n nn個元素,第i ii個元素有a ia i ai b ib i bi c ic i ci 三個屬性,設f i f i f i 表示滿足aj ai a j a i aj ai 且bj b ib j b i bj bi 且cj c ic j c i cj ci 且j ij i j i的j j...
P3810 陌上花開 CDQ分治
傳送門 有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 的數量 cdq分治模板題,我們將第一維在主函式排序後,cdq分治裡面,每...
luogu3810 陌上花開 cdq分治
求三維偏序 設三維為a,b,c。先對a排序,這樣i的偏序就只能然而排序的時候需要三個維度都判斷一遍,最後還要去重,不然會出現實際應該記答案的數出現在它後面的情況。排序用的函式裡不要寫類似於 之類的東西啊.會出奇奇怪怪的問題的 re 然後分治來做,我們在做區間 l,r 的時候,先去做 l,m 和 m ...