BZOJ 1878 hh的項鍊(簡單莫隊)

2022-05-05 20:45:07 字數 1479 閱讀 8368

hh有一串由各種漂亮的貝殼組成的項鍊。hh相信不同的貝殼會帶來好運,所以每次散步 完後,他都會隨意取出一

段貝殼,思考它們所表達的含義。hh不斷地收集新的貝殼,因此他的項鍊變得越來越長。有一天,他突然提出了一

個問題:某一段貝殼中,包含了多少種不同的貝殼?這個問題很難回答。。。因為項鍊實在是太長了。於是,他只

好求助睿智的你,來解決這個問題。

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

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

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

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

n ≤ 50000,m ≤ 200000。

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

6

1 2 3 4 3 5

31 2

3 52 6

224

題解:額,莫隊入門題,真的非常好理解,學會以後只能orz莫隊,實在是太暴力了,正因為暴力,莫隊可以做很多只有暴力才能搞的區間查詢,整個**難度主要在一些細節上,但其實實在不行可以背啊~

**如下:

#include#include

#include

#include

#include

using

namespace

std;

struct

node

q[200020

];int a[50050],cnt[1000010],n,m,sz,sum,ans[200020

];int block(int

x)int

cmp(node a,node b)

return a.l}void add(int

x) cnt[a[x]]++;

}void del(int

x) cnt[a[x]]--;

}int

main()

scanf("%d

",&m);

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

sort(q+1,q+m+1

,cmp);

int nowl=1,nowr=0

;

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

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

}

樹狀陣列 BZOJ1878 HH的項鍊

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

bzoj1878 HH的項鍊(莫隊)

這篇部落格簡要介紹下我對莫隊的理解。莫隊是一種複雜度為o n sqrt n 的演算法。具體思路是 通過區間左端點的左移和右移與區間右端點的左移和右移來進行更新 排序的時候進行分塊操作,目的是減少左移右移的次數。分塊的話假設序列個數是n,那麼就分為sqrt n 塊,然後根據塊進行排序 就是先將要查詢的...

樹狀陣列 BZOJ1878 HH的項鍊

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