數列分塊入門9 區間眾數

2021-09-09 02:10:33 字數 663 閱讀 3898

原題:

題解:基本題意求[l,r]的最小眾數,對於集合 a,b 顯然 mode(a and b)屬於 mode(a) and b。這樣就可以分塊,預處理f[i][j]表示i-j的眾數。每次查詢時暴力查詢頭尾兩塊的數和中間塊的眾數就可以,關於查詢x在[l,r]出現了幾次,用動態陣列存放x的下標,二分查詢就好了。可以先給a陣列離散化。這道題塊的大小大概是

#include#define reg register 

#define pa pairusing namespace std;

const int n=110000,m=5500;

int n,m,h,a[n],t[n],pos[n],cnt[n],ff[n];

pa f[m][m];//i-j的眾數

vectorv[n];

inline int rd()

inline void clear(int *a,int m)

inline int ask(int l,int r,int x)

inline int query(int l,int r)

f[i][j]=mode;

} }

for(reg int i=1,l,r;i<=n;i++)

return 0;

}

LOJ 6285 數列分塊入門 9 區間眾數

如果只查詢眾數的個數,完全可以莫隊,加數時容易維護眾數的數量,刪除數時,眾數的數量要麼減1,要麼不變,只需再開乙個標記陣列維護眾數的數量即可 根據陳立傑 區間眾數解題報告 實現了下面兩種解法 解法一 塊數分成sqrt n 超時了,150可以過 分塊真毒瘤 pragma gcc optimize 2 ...

loj 數列分塊入門 6 9 區間眾數

給出乙個長為 n 的數列,以及 n 個操作,操作涉及單點插入,單點詢問,資料隨機生成。參考 每個塊內用乙個 vector 維護,每次插入時先找到位置所在的塊,再暴力插入。如果資料不隨機,即如果先在乙個塊有大量單點插入,這個塊的大小會大大超過 sqrt n 那塊內的暴力就沒有複雜度保證了。為此引入乙個...

數列分塊入門7 區間標記下放

原題 題解 本題大意 區間加法,乘法,單點查詢,設sum為塊的加法標記,mul為乘法標記。通過分析有 include define reg register define ll long long const int n 110000,mm 550,m 10007 using namespace s...