演算法之 莫隊 區間處理神器orz

2022-05-15 19:13:21 字數 1228 閱讀 2954

例題:luogu p1972 [sdoi2009]hh的項鍊

無hh 有一串由各種漂亮的貝殼組成的項鍊。hh 相信不同的貝殼會帶來好運,所以每次散步完後,他都會隨意取出一段貝殼,思考它們所表達的含義。hh 不斷地收集新的貝殼,因此,他的項鍊變得越來越長。有一天,他突然提出了乙個問題:某一段貝殼中,包含了多少種不同的貝殼?這個問題很難回答……因為項鍊實在是太長了。於是,他只好求助睿智的你,來解決這個問題。

輸入格式:

第一行:乙個整數n,表示項鍊的長度。

第二行:n 個整數,表示依次表示項鍊中貝殼的編號(編號為0 到1000000 之間的整數)。

第三行:乙個整數m,表示hh 詢問的個數。

接下來m 行:每行兩個整數,l 和r(1 ≤ l ≤ r ≤ n),表示詢問的區間。

輸出格式:

m 行,每行乙個整數,依次表示詢問對應的答案。

輸入樣例#1:

6

1 2 3 4 3 5

31 2

3 52 6

輸出樣例#1:

2

24

資料範圍:

對於100%的資料,n <= 50000,m <= 200000。

莫隊真是好玩orz,存一下模板ovo

1 #include 2 #include 3 #include 4 #include 5

#define maxn 50010

6#define maxm 200005

7using

namespace

std;

8int

a[maxn],cor[maxn],ans[maxn];

9struct

qq[maxm];

12int

n,m,block,cnt;

13int

comp(q a,q b)

17void del(int

x) 21

void add(int

x) 25

void

work() 34}

35int

main()

45 sort(q+1,q+1+m,comp);

46work();

47for(int i=1;i<=m;i++) printf("

%d\n

",ans[i]);

48return0;

49 }

處理區間問題之樹狀陣列與莫隊演算法

感覺我直到前兩天才算是真正學會用樹狀陣列啊囧。有一類離線的區間詢問問題,可以有以下解法 我暫時會這麼多 離線 樹狀陣列 線段樹 莫隊演算法 線段樹先不說了,好久沒寫過了,而且本文的標題是樹狀陣列與莫隊囧。用樹狀陣列的關鍵在於,每次插入乙個點或者刪除乙個點要維護什麼東西,一般是插入右端點刪除左端點,維...

莫隊演算法 區間眾數出現次數

2020.5.19 昨天學完莫隊之後重寫了一遍mcpc19的那一道區間眾數的,發現了幾個可以改進的點。乙個是離散化,港真我不知道原題是怎麼回事兒,上了離散化,後來無論是d query還是路邊的蒲公英好像完全沒必要上離散化,畢竟是1e5個數字,開個陣列記錄下就行了,所以這部分刪掉,然後模擬一下我們查詢...

優雅的區間問題暴力 莫隊演算法

對dalao口中可以 o n 區間內絕大部分無修改離線問題的莫隊演算法,一直處於 好騎 的狀態,最近終於找到了學習的機會,其實感覺,這著實是乙個優雅的暴力。莫隊演算法的大前提,是可以利用已知的 l,r 內的答案,直接得到 l,r 1 l 1,r l 1,r l,r 1 上的答案。以下內容預設上述轉移...