樹狀陣列 洛谷 P1972 HH的項鍊

2022-07-24 05:54:15 字數 1089 閱讀 9945

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。

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

#define n 1000010

6using

namespace

std;

7struct edge e[n];

8int n,q,last=1

,x[n],bz[n],ans[n],sz[n];

9bool cmp(edge a,edge b)

10void insert(int x,int y)

11int query(int

x)12

16int

main()

1730 last=e[i].y+1,ans[e[i].d]=query(e[i].y)-query(e[i].x-1

);31}32

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

%d\n

",ans[i]);

33 }

洛谷P1972 HH的項鍊 樹狀陣列

題目 題意 給定乙個長度為n的序列,數字表示珠子的種類。m次查詢每次詢問給定區間內珠子的種類數。思路 可以說是運用了字首和的思想吧。從前到後的去處理查詢,而對於某乙個查詢區間,如果某乙個種類出現了多次的話我們只需要計算最後一次出現。用query x 表示1 x區間內的種類數,其中對每個種類我們只標記...

洛谷 P1972 HH的項鍊(樹狀陣列,排序)

題目大意 已知一串數字an,有m個詢問,每個詢問包含乙個區間 a,b 問你an在區間 a,b 中有多少個不同的數。解題思路 我們把每個詢問的右區間進行排序,每次我們對樹狀陣列進行更新,怎麼更新呢?對於重複出現的數字,我們只記錄最後一次出現位置,並在對應位置打1 注意 這裡不是對樹狀陣列打1,樹狀陣列...

洛谷 P1972 HH的項鍊

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