洛谷P3810 陌上花開(CDQ分治)

2022-03-02 01:53:59 字數 970 閱讀 3591

傳送門

題解: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 ...