很久以前就聽說這個大名鼎鼎的東西(暴力)了,現在才去寫。其實很簡單,對每一維排序,從左到右掃,維護乙個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,...