莫隊學習筆記

2022-04-04 16:18:20 字數 2292 閱讀 6847

\(\text\)

\(\text\)

借用的內容

一般的區間問題都可以使用莫隊。

這是離線莫隊的裸的板子(真的就這麼短的四句話只是add和del裡面要加內容。。)

至於塊的大小在這兒

對於複雜度的分析

\(\text\)

\(\sum_^ x_i * \sqrt + n * \sqrt\) = \(o(n\sqrt)\)

\(\text\)

由此可以推出 莫隊的複雜度大概就是乙個 \(\theta(n \sqrt)\)

莫隊**都很短的 只要別把l++寫成++l

例題整理

小z的襪子

小z的襪子(雙倍經驗)

帶修改的莫隊

離散化樹上莫隊

bzoj4866

bzoj3809 還有在衢州欠下的題(小聲

莫隊的板子:

例題先鴿 明天再更

這題好像就是個結論題

數學計算方法為

對於乙個區間的計算我們設\(i\)的個數為\(s_i\)

那麼答案就是

$\sum_^ - (r - l + 1) \(

\)-------------------\(

\) $

**

#include using namespace std ;

#define int long long

inline int read()

struct node ;

// #define int long long

struct answer

inline void solve()

else

printf("%lld/%lld\n" , x , y) ;

return ;

}};const static int n = 100000 + 5 ;

int n ;

int a[n] ;

node q[n] ;

int bl[n] ;

answer ans[n] ;

inline bool cmp(node x , node y)

int ans = 0 ;

int s[n] ;

inline void delete(int x)

inline void insert(int x)

signed main() ;

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

int l = 1 , r = 0 ;

int ans_x = 0 ;

int ans_y = 0 ;

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

continue ;

}ans_x = ans - (q[i].r - q[i].l + 1) ;

ans_y = (q[i].r - q[i].l + 1) * (q[i].r - q[i].l) ;

ans[q[i].id] = ;

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

return 0 ;

}

莫隊學習筆記

zl 姐姐有一串數,由於學生化太頭禿了,所以現在他想問你 m m 1e5 次,其中 l 到 r 區間出現次數在 3 次及以上的數有多少個?線段樹效率低下,不好維護。p.s.lmpp 巨佬說如果 3 次可以取等的話,線段樹反而效率更高,巨佬們可以自己嘗試,菜比這裡就不演示了 故引入莫隊 一種處理區間問...

學習筆記 莫隊

題意簡述 給定乙個長度為 n 的序列,每次給定乙個區間 l,r 求 r l 1 count 1 times count 2 times times count n 先預處理出階乘和階乘的乘法逆元,然後每次更新除掉原來的數乘上後來的數就好了 code below include include inc...

學習筆記 樹上莫隊

其實樹上莫隊是乙個尤拉序而已嘛,像普通的莫隊,特判一下出現過兩次的值就行了 設 st i 為 i 進棧的時間,ed i 為 i 出棧的時間,dfn x,那麼就可以分兩種情況 1 y 在 x 子樹中,也就是 lca x,y x 那麼區間轉化成 st x,st y 2 y 不在 x 子樹中,也就是 lc...