解決型別題:給定乙個數列,進行區間的查詢.
對於給定的數列,如果我們已經知道了一段區間要求的結果,設左右邊界為l和r,然後讓我們求ql到qr區間的結果ans,此時,我們可以讓r和l移動,到ql和qr上,在移動的過程中,對ans進行修改即可,有點像尺取法對吧。我們要優化時間,就要儘量減少移動的次數,所以此時對整個數列進行分塊,進行乙個sort排序,如果左端點在乙個塊內,就以右端點排序,否則以左端點排序。至於時間複雜度,我也不是太理解,可能是因為不會分快吧。
例題:對於這些板子題,加減函式的ans計算還是比較靈活多變的
首先要知道,我們要求的是什麼,隨機對一段區間抽兩雙襪子,問是同一種顏色的概率為多少?還要化簡分數,那我先確定一下分母是誰:long=(r-l+1)是區間長度,抽兩雙襪子,一共有多少種排列組合?long*(long-1)/2對吧。那我們可以用莫隊演算法來求一下分子:在這段區間中,某種顏色的襪子有x只我知道,所有顏色x的排列組合不就是分子嘛!!不過,x的變化跟分子並不是 y=x的關係,所以我有乙個操作:先把顏色x的排列組合減去,等x 加減1之後,我再計算顏色x的排列組合,再把它加上去就okk了。
注意:區間已經進行了乙個排序操作,由於最後還要求分母,我還要把順序還原,所以就又有了乙個亂七八糟的操作咯
#include#include#include#includeusing namespace std;
#define n 50000+20
struct node
q[n];
int block;
bool comp(node x,node y)
for(int i=1;i<=m;i++)
return 0;
}
無刪除莫隊與二次離線莫隊
大佬部落格 無刪除莫隊 沒打過但是可以拿來湊數。不就是用可回退化 你一定需要看一看 十二省聯考2019 希望 的莫隊來。skip。二次離線莫隊 一開始看是ynoi的題以為沒有啥可拓展性。然後看了上面那位大佬的部落格才發現這個方法大有可為。莫隊實際上是把o m o m o m 個詢問拆分成o n m ...
莫隊入門總結
這是一篇適合蒟蒻的講解 大佬可以自行離開 莫隊是一種是離線的演算法 即它在詢問的時候是不會修改的,所以我們可以通過調整詢問的次序來獲得答案。比如區間3到5和區間3到6 他們之間只差了1 於是我們只需要看下新加進來的這個元素對原來答案的影響就好了 對吧?問題是 我們應該如何給詢問區間排序使得時間複雜度...
莫隊演算法入門
昨天重溫了一下captainmo的職業生涯 莫隊的模板,看了下別人的部落格,把三個板子打了,做練習前先小小總結了一下吧。一.基礎莫隊演算法 莫隊演算法 離線 暴力 分塊,它通常用於不修改只查詢的一類區間問題,複雜度為 主要就是通過排序過後再處理詢問能優化暴力,排序則是利用分塊,至於為什麼更優,附張別...