SDOI2009 HH的項鍊 莫隊

2021-08-07 06:24:33 字數 1188 閱讀 8885

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

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

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

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

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

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

6 1 2 3 4 3 5

3 1 2

3 5

2 62 2 4

資料範圍:

對於20%的資料,n ≤ 100,m ≤ 1000;

對於40%的資料,n ≤ 3000,m ≤ 200000;

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

這題方法應該很對呀。。

目測線段樹/莫隊/樹狀陣列/主席樹貌似都能夠搞

反正,直接用最容易的莫隊

和莫隊其他的題目是一樣的套路

很明顯可以o(1)轉移狀態

莫隊直接搞就行了

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define max 1000100

inline

int read()

while(ch>='0'&&ch<='9')

return x*t;

}struct query

q[max];

int color[max],a[max],ans,c[max],n,m;

bool

operator

<(query a,query b)

int main()

for(int i=1;i<=m;++i)printf("%d\n",a[i]);

return

0;}

SDOI2009 HH的項鍊 題解

題意 給乙個序列,長度為n,再給m個詢問,對每個詢問,輸出這個區間內有多少個不同的數。其實只需要把最後乙個出現的數統計一下就可以了,因為只有最後乙個出現的那個數才是有價值的,之前重複的數可以忽略,由此,演算法的框架就出來了,只需要有cdq的思想把查詢以區間的右端點為關鍵字排序,從前到後,同時用新出現...

SDOI2009 HH的項鍊 線段樹

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

SDOI2009 HH的項鍊 樹狀陣列

1972 sdoi2009 hh的項鍊 一段區間包含了多少種不同的數字 emmmm有很多種做法 莫隊 主席樹 線段樹.我覺得這題還挺好的 我比較弱就用的樹狀陣列 得離線 關鍵點是要將右端點r作為關鍵字 若前面出現過 就將其消掉 轉移到當前 for int i 1 i m i 這一坨把它比比划划就能明...