洛谷 1972 HH的項鍊

2022-05-26 08:30:13 字數 1443 閱讀 5268

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 <= 500000,m <= 500000。

題解:莫隊題目,能拿70分,然後就tle了(uoj 10分,氣憤)

更新!!!100分,l=1開始就可以了

#include#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int n=1000005

;inline

intget

()

while (c>='

0'&&c<='9'

)

return res*f;

}struct

nodee[n];

inta[n],n,m,jjj[n],f[n],ans,k;

bool

cmp(node p,node q)

void add(int

x)void remove(int

x)int

main()

sort(e+1,e+m+1

,cmp);

int l=1,r=0

;//原來是l=r=0,氣憤,l從1開始就100了

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

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

printf(

"%d\n

",jjj[i]);

return0;

}

洛谷1972 HH的項鍊(樹狀陣列)

剛看完這道題yy了一下線段樹的做法,大概就是維護顏色出現次數,如果區間合併時乙個顏色的個數從0變為1,那麼就出現了一次,cnt 不過感覺很難寫所以就沒寫 很明顯可以離線來做,因為不涉及修改操作,所以將所有詢問按左右id進行排序,對於同一顏色,用鍊錶儲存位置,從左向右走的時候向樹狀陣列中更新,然後在樹...

洛谷 P1972 HH的項鍊

題意 查詢某一區間顏色數 思路 對於固定區間來說,顏色數隻與各種顏色第一次出現的位置有關。該位置置1,該顏色其餘位置置0.include using namespace std typedef long long ll typedef pairpii typedef pairpiii const l...

洛谷P1972 HH的項鍊

傳送門啦 分析 題目描述不說了,大意是,求一段區間內不同元素的種數。看到區間,我們大概先想到的是暴力 然後炸掉 線段樹 樹狀陣列 分塊。下面給出的是一種樹狀陣列的想法。首先,對於每一段區間裡的數,如果出現重複的元素,我們只需要看最後乙個就好了。所以,我們可以對所有需要查詢區間的右端點進行從小到大的排...