CDQ分治解二維偏序

2021-09-27 03:13:54 字數 1243 閱讀 5562

stars-poj 2352

求解沒有重複項的包含子集的個數。

我們直接求其貢獻,對於一維偏序x座標進行公升序排序,對於二維偏序y座標進行分治,我們從遞迴至底層,然後向上更新,對於左右子樹,左子樹的x一定是小於右子樹的任意乙個點的x座標,所以我們求對右子樹的貢獻的時候,可以直接比較y座標的大小。

並且,對於已經處理完的左右區間,y是單調的。

#include #include #include #include #include #include #include #include #include #include #include #include #define lowbit(x) ( x&(-x) )

#define pi 3.141592653589793

#define e 2.718281828459045

#define inf 0x3f3f3f3f

#define half (l + r)>>1

#define lsn rt<<1

#define rsn rt<<1|1

#define lson lsn, l, mid

#define rson rsn, mid+1, r

#define ql lson, ql, qr

#define qr rson, ql, qr

#define myself rt, l, r

using namespace std;

typedef unsigned long long ull;

typedef unsigned int uit;

typedef long long ll;

const int maxn = 15007;

int n, m, level[maxn] = , ans[maxn];

struct node

friend bool operator < (node e1, node e2)

}q[maxn], cop[maxn];

void cdq(int l, int r)

}for(int i=l; i<=r; i++) q[i] = cop[i];

}int main()

sort(q + 1, q + n + 1);

cdq(1, n);

for(int i=1; i<=n; i++) ans[level[i]]++;

for(int i=0; ireturn 0;

}

陌上花開(三維偏序)(cdq分治)

其實就是三位偏序的模板,cdq分治入門題。學習cdq分治請看 stdcall大佬的部落格 傳送門 排序來維護第一層,cdq維護一層,樹狀陣列維護一層,然後就沒有啦qwqwq include include include include include define maxn 100010 usin...

二維偏序問題

想學cdq分治,然而cdq的經典題目是三維偏序問題,是建立在二維偏序問題的基礎上的。我這只蒟蒻連個二維偏序問題都沒做過。在網上找了一大圈,才勉強找到乙個二維偏序的題目。bzoj的許可權啊。是時候買個許可權號了。題目鏈結 這個牛客網也不知道是什麼鬼。給你n個物品,每個物品有兩個參量,分別為 s,w 讓...

Laptop 二維偏序

fst是一名可憐的小朋友,他很強,但是經常fst,所以rating一直低迷。但是重點在於,他非常適合acm!並在最近的區域賽中獲得了不錯的成績。拿到獎金後fst決定買一台新筆記本,但是fst發現,在 能承受的範圍內,筆記本的記憶體和速度是不可兼得的。可是,有一些筆記本是被另外一些 完虐 的,也就是記...