SDOI2009 HH的項鍊 題解

2021-08-28 15:24:21 字數 628 閱讀 6173

題意:給乙個序列,長度為n,再給m個詢問,對每個詢問,輸出這個區間內有多少個不同的數。

其實只需要把最後乙個出現的數統計一下就可以了,因為只有最後乙個出現的那個數才是有價值的,之前重複的數可以忽略,

由此,演算法的框架就出來了,只需要有cdq的思想把查詢以區間的右端點為關鍵字排序,從前到後,同時用新出現的數來頂替之前的「舊數」,其實就是記錄一下每個數的最近出現地點,查詢只需樹狀陣列來維護一下區間和就好了。

**:

#include#define n 500007

#define m 1000007

using namespace std;

int a[n];int n,m;struct quesque[n];bool cmp(ques x,ques y)return ans;

}bool cmp1(ques x,ques y)

int main()sort(que+1,que+1+m,cmp);j=1;

for(i=1;i<=m;i++)que[i].ans=sump(que[i].r)-sump(que[i].l-1);

}sort(que+1,que+1+m,cmp1);

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

}

SDOI2009 HH的項鍊 莫隊

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

SDOI2009 HH的項鍊 線段樹

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

SDOI2009 HH的項鍊 樹狀陣列

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