莫隊 區間不同數(金牌導航 莫隊 1)

2021-10-20 09:30:46 字數 1200 閱讀 9186

給出n個數,然後詢問m次,每次詢問乙個區間內不同的數的個數

6

1 2 3 4 3 5

31 2

3 52 6

2

24

1⩽n

⩽5×1

04,1

⩽m⩽2

×105

,0⩽a

i⩽10

61\leqslant n\leqslant 5\times 10^4,1\leqslant m\leqslant 2\times 10^5,0\leqslant a_i\leqslant 10^6

1⩽n⩽5×

104,

1⩽m⩽

2×10

5,0⩽

ai​⩽

106先將原序列分塊,然後對每個查詢進行排序,排序以左端點所在塊為第一關鍵字,以右端點為第二關鍵字

然後每次在上乙個查詢的前提下進行查詢

分塊和莫隊有效降低了時間複雜度,使時間複雜度是o(n

n)

o(n\sqrt)

o(nn​)

#include

#include

#include

#include

#include

#define ll long long

#define n 50010

#define m 200021

#define nn 1000010

using

namespace std;

int n, m, w, g, l, r, s[n]

, p[nn]

, ans[m]

;struct node

a[m]

;bool

cmp(node a, node b)

intmain()

sort

(a +

1, a +

1+ m, cmp)

;for

(int i =

1; i <= m;

++i)

for(

int i =

1; i <= m;

++i)

printf

("%d\n"

, ans[i]);

return0;

}

luogu 數列找不同 莫隊

了解過莫隊的人應該都清楚,莫隊是乙個優化的暴力,可以在相對暴力比較優的時間中,求出一段序列內的某些性質 例 數字的種類 那麼這道題就明顯是一道模板題了,在l,r 左右段點 移動的過程中,記錄數字的種類,若種類數等於r l 1,那麼表明沒有重複。include include include incl...

數顏色(莫隊帶修)

數顏色題目鏈結 帶修改的莫隊,關於時間複雜度的分析沒仔細看,但是這是乙個能實現更改的離線操作,感覺在之前的維度上加了一維 時間維度,可以將狀態向前或者向後改變,而時間的變遷也用while來更新,以達到操作目的,sort規則也變成這樣 return qu a.l qu b.l qu a.r qu b....

帶修莫隊 數顏色

bzoj2120 帶修莫隊的做法 把所有修改也離線下來 新建乙個tk指標表示進行了k次修改,然後對於每個詢問記錄一下它之前有多少次修改,記為k,處理這個詢問時如果當前修改次數小於k,那麼就把tk往上滾,並進行修改,如果大於k,就把tk往下滾,並回溯修改 code include using name...