BZOJ 2427 分塊裸題

2022-05-13 10:55:29 字數 1744 閱讀 1693

題意:

sol:

推薦乙個大神犇的blog,講的還是很好的(主要我喜歡他的**風格(逃:

太裸沒什麼意思...雖然好些但碼碼也挺長的...

還是貼那個大神的**天天看著**打的會不會好看點》_<

#include #include #include #include #include #include using namespace std;

inline void read(int &num) }

const int maxn = 40000 + 5, maxblk = 200 + 5;

int n, m, blksize, totblk;

int a[maxn], tl[maxn], t[maxn], cnt[maxn], l[maxblk], r[maxblk], first[maxn], last[maxn];

int f[maxblk][maxblk], g[maxblk][maxblk];

struct es

e[maxn];

inline bool cmp_num(es e1, es e2)

inline bool cmp_pos(es e1, es e2)

int getnum(int num, int x, int y)

else l = mid + 1;

}l = first[num]; r = last[num];

while (l <= r)

else r = mid - 1;

}return p2 - p1 + 1;}

int main()

sort(e + 1, e + n + 1, cmp_num);

int v_index = 0;

for (int i = 1; i <= n; ++i)

sort(e + 1, e + n + 1, cmp_pos);

for (int i = 1; i <= n; ++i) a[i] = e[i].v;

sort(e + 1, e + n + 1, cmp_num);

//三次排序感覺真是浪費啊...

for (int i = 1; i <= n; ++i) //數字段的頭尾

blksize = (int)sqrt((double)n);

totblk = (n - 1) / blksize + 1;//很不錯的技巧啊

for (int i = 1; i <= totblk; ++i)

r[totblk] = n;

for (int i = 1; i <= totblk; ++i) }}

}memset(cnt, 0, sizeof(cnt));

for (int i = 1; i <= n; ++i) t[i] = -1;

int l, r, x, y, ct, ans, cu;

ans = 0;

for (int i = 1; i <= m; ++i)

}for (int j = l; j <= r; ++j) --cnt[a[j]];

}else

}for (int j = r; j > r[y]; --j)

}for (int j = l; j < l[x]; ++j)

for (int j = r; j > r[y]; --j)

}ans = tl[ans];

printf("%d\n", ans);

}return 0;

}

BZOJ 1257(分塊思想)

題意 給定n,k n,kn,k,問 i 1nkm od i sum k bmod i i 1n kmod i,其中1 n k 1 09 1 leq n,k leq 10 9 1 n,k 109題解 由 k mo di k ki ik bmod i k lfloor frac rfloor times...

BZOJ 2724 分塊統計

區間眾數 先離散化,學到了lagoon的lower bound unique的離散化,比我寫的簡單多了 預處理分成sqrt n 塊,記錄d i j 和p i j 分別表示從i塊起始位置到j塊終止位置的眾數出現次數和這個數是誰 開乙個陣列,記錄每個數的位置,使得同類的相鄰,同類數的座標公升序排列。對於...

BZOJ2741分塊 字典樹

分塊 字典樹走起f i j 表示在第i,j個塊間選l,r的答案a j i 表示第j個單點到第i個塊的答案兩邊的散點暴力合併加入字典樹統計答案注意陣列的定義 明確陣列的內涵 include include include include define n 12050 define siztrie 12...