bitset做多維偏序

2021-09-19 06:15:05 字數 607 閱讀 2993

很久以前就聽說這個大名鼎鼎的東西(暴力)了,現在才去寫。其實很簡單,對每一維排序,從左到右掃,維護乙個bitset表示這位之前的某個點是否出現(即出現則該位為1否則0),查詢某個數時則在每一維的排序完陣列二分找到最右邊<=這個數這一維權值的位置,取出該位的bitset,將每一維的bitset與起來即可得到答案,每次查詢n/w,但這樣空間要維數*n^2/w,因此可以分塊增加查詢時的一些時間換空間。

#include#define bst bitset<50010>

using namespace std;

const int n=50010,bsz=250;

templatevoid rd(t &x)

struct gg

}nd[n];

int n,m,bg[260],blk,cmp_id,mp[5][n],wh[5][n],lm[260],rm[260],bl[n];

bst pre[5][260],bst;

bool cmp(gg x,gg y)

int main()

}gg tmp;int ps;

rd(q);

while(q--)

}}

bitset 求解高維偏序

給定 n le 3 times 10 4 個五元組,對於每個五元組 a i,b i,c i,d i,e i 求存在多少個 1 le j le n 滿足 a i a j 且 b i b j 且 c i c j 且 d i d j 且 e i e j 保證每一維都是 1 cdots n 的排列。傳統的做...

學習筆記 多維偏序

一般情況下,我們比較乙個數大小,就是ai aj即可,而在上公升子串行中,當i j並且ai aj的時候,才可以認為i這位的數大於j這位的數。這就是乙個二維偏序。類似的,有n個數,每個數m個屬性,乙個數比另乙個數大,當且僅當這個數的所有屬性都大於另乙個數。這就是乙個m維偏序。對於三維偏序,可以用cdq分...

等價,偏序和全序

等價 設 r 是某個集合 a 上的乙個二元關係。若 r 滿足以下條件 自反性 對稱性 傳遞性 則稱 r 是乙個定義在 a 上的等價關係。習慣上會把等價關係的符號由 r 改寫為 例如,設 上的關係r 如下 其中 與 y模 3 同餘,即 x 除以 3 的餘數與 y 除以 3 的餘數相等。例子有 1r4,...