這題也是坑了好久》_<
之前whx帶我刷joi的時候本來應該要做的。。。可是太懶沒有寫。。。
區間詢問加權眾數。
分塊,預處理出塊和塊之間的答案,記錄到第i個塊數字x出現了多少次。然後查詢的時候和普通眾數基本一樣,就是乘了個權值而已。
要離散化。
時間複雜度o(
nlogn+
mn√)
。 昨晚寫的常數太爛了。。。用了struct,陣列開大了,狂m
然後卡了卡空間,狂re doge
然後查了很久發現有個邊界寫的有點問題
改完之後就無限tle辣qaq
電腦課花了20min來rewrite結果就a掉了smg。。。。
#include
using
namespace
std;
#define rep(i,a,b) for(int i=a,_=b;i<=_;i++)
#define per(i,a,b) for(int i=a,_=b;i>=_;i--)
#define maxn 100007
#define maxb 331
inline
int rd()
typedef
long
long ll;
inline
void upmax(ll&a , ll b)
typedef
int arr_int[maxn];
typedef ll arr_ll [maxn];
typedef
int blk_int[maxb];
typedef ll blk_ll [maxb];
int n , m , all , len , tot;
arr_int h , a , cnt , belong;
blk_ll ans[maxb];
arr_int sum[maxb] , st , ed;
void input()
void init_block()
}}void query(int l , int r)
} else
rep (i , st[r] , r)
}printf("%lld\n" , mx);
}void solve()
}int main()
BZOJ4241 歷史研究
一眼覺得是莫隊,發現刪除不是很好搞,於是上回滾莫隊直接搞過 回滾莫隊用於處理難以刪除但是易於新增 其實易於刪除難以新增也可以,但是沒見過這樣題 的莫隊,排序照常,如果左右端點在同一塊直接暴力,這部分最多n sqrt n,否則把左端點在一塊的一起處理,清空莫隊,然後直接令莫隊左端點在塊尾,這部分n s...
bzoj4241 歷史研究
題目鏈結 看到題目就聯想到了 bzoj2809 apio2012 dispatching。想了想權值分塊 莫隊,發現不好維護塊內最值,又看了看80s的時間,於是怒水一發線段樹 莫隊,結果先wa後tle,不斷tle,無論怎麼改常數都不行,難道nlogn sqrt n 就是過不了嗎!不爽,蒯個題解,再見...
BZOJ 4241 歷史研究
藉此學習回滾莫隊。經典的莫隊 對於區間 l r 向別的區間轉移狀態時。有時是刪除。有時是插入。同時需要維護。這類問題需要插入和刪除,以及維護比較快的情況下。才可以實現。回滾莫隊 插入和刪除是互反的操作。對於有些問題。插入和刪除好辦。維護困難。回滾莫隊可以解決 插入維護時困難,或者,刪除維護時困難的問...