回滾莫隊 AT1219 歴史 研究

2022-06-12 22:00:11 字數 886 閱讀 8315

洛谷題目

at1219

不滿足區間減性質的運算,如最值,就不能用普通莫隊求,

考慮回滾莫隊,它的核心思想就是若區間在塊內直接暴力,

否則將右端點從小到大排序,右端點按普通莫隊求,那麼左端點由於只在乙個塊內,

所以詢問完跳到塊末,由於塊的大小為根號,影響複雜度的實際上是右端點,

然後每次處理完相同左端點塊清除標記

#include #include #include #include #define rr register

using namespace std;

const int n=100011; typedef long long lll;

struct recq[n]; lll ans[n];

int a[n],b[n],pos[n],c[n],m,tot,bl,n,cnt[n],cnt[n];

inline signed iut()

inline void print(lll ans)

bool cmp(rec x,rec y)

inline lll calc(int l,int r)

for (rr int i=l;i<=r;++i) --cnt[a[i]];

return ans;

}signed main();

sort(q+1,q+1+m,cmp);

for (rr int l=1,r;l<=m;l=r+1)

for (rr int i=1;i<=tot;++i) --cnt[c[i]];

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

print(ans[i]),putchar(10);

return 0;

}

AT1219 歴史 研究 回滾莫隊

題目描述見鏈結 直接使用莫隊,但是這道題目刪除時不好尋找次大值,考慮回滾莫隊,回滾莫隊的處理方式與莫隊大致是相同的,具體來說 對兩個相鄰的詢問區間 l r l,r l r l,r l r l r 若 b k id l bk id r bk id l bk id r bk id l b k id r ...

AT1219 歴史 研究(回滾莫隊模板)

點此看題面 這種區間詢問的問題一般來說可以利用莫隊解決。然而這道題求的是最大值,似乎普通莫隊就無法很好地實現刪除操作,因此就需要回滾莫隊這種黑科技。考慮我們先暴力處理掉左端點和右端點在同乙個塊內的詢問 顯然這部分複雜度是 o n sqrt n 的 然後對於剩餘的詢問把它扔到左端點對應塊的 vecto...

題解 AT1219 歴史 研究

簡單分析 題面含有ioi 驚 可知此題是ioi 數字三角形 難度 逃 當然很多人都是抱著學回滾莫隊的目標來看這道題的,所以這裡介紹一下回滾莫隊。1 按莫隊的思路講詢問排序。2 查詢時列舉每個區間,我們需要保證右端點是保持單調遞增的,同時左端點每次在乙個塊中移動,以此來計算每個詢問的值。3 每一次到下...