2725 HH的項鍊(樹狀陣列)

2021-09-28 14:43:49 字數 1262 閱讀 8166

題目描述

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

輸入第一行:乙個整數n(n ≤ 50000),表示項鍊的長度。

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

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

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

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

複製樣例資料

6

1 2 3 4 3 5

31 2

3 52 6

樣例輸出

2

24

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f

typedef long long ll;

using namespace std;

int num[1000010],c[1000010],vis[1000010],s[1000010],n,w;;

struct node

p[1000010];

bool cmp(node x,node y)

int lowbit(int x)

void add(int n,int k)

}int sum(int n)

return ans;

}int main()

sort(p+1,p+1+w,cmp);

int cd=1;

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

cd=p[i].r+1;

s[p[i].dd]=sum(p[i].r)-sum(p[i].l-1);

}for(int i=1; i<=w; i++)

printf("%d\n",s[i]);

return 0;

}

HH的項鍊 樹狀陣列

code 我洛谷部落格 點這裡某一段貝殼中,包含了多少種不同的貝殼?最開始看見這道題時,沒有思路 但再看看,可以非常明了的發現這是乙個樹狀陣列ban題 設有一長為5的項鍊 1 2 3 2 1 然後 m 3 1 52 5 1 3我的思路是這樣,由於要求的是種類數 求l 到 r 的個數 每種貝殼只能存乙...

HH的項鍊(樹狀陣列)

由於詢問的是區間中貝殼的種類數,所以問詢區間中相同種類的貝殼只有乙個會起作用 將i位置的貝殼前一次出現的位置記作pre i 種類為x的貝殼最後一次出現的位置記作f x 類似於鄰接表的nxt和had,利用pre i f x f x i來處理pre 對於每個詢問 l,r 只有pre i 也就是說所處位置...

HH的項鍊 樹狀陣列

我csdn部落格 點這裡某一段貝殼中,包含了多少種不同的貝殼?最開始看見這道題時,沒有思路 但再看看,可以非常明了的發現這是乙個樹狀陣列ban題 設有一長為5的項鍊 1 2 3 2 1 然後 m 3 1 52 5 1 3我的思路是這樣,由於要求的是種類數 求l 到 r 的個數 每種貝殼只能存乙個 不...