洛谷題目
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 每一次到下...