洛谷 P1972 SDOI2009 HH的項鍊

2022-04-07 01:37:22 字數 972 閱讀 6738

1.按每個要求的區間的右端點排序一下

2.樹狀陣列tree[j]維護從1到j區間內不同數字的個數有多少個

3.然後用字首和的思想就好(tree[r]-tree[l-1])

1 #include2 #include3 #include4

#define maxn 1000002

5#define next nex

6#define lowbit(x) x & -x78

using

namespace

std;910

intnum[maxn],tree[maxn],b[maxn],ans[maxn],n,m;

11//

b[i]表示i出現的最靠右的位置

12struct

kkk e[maxn];

1617

bool

cmp(kkk a,kkk b)

2021 inline void add(int x,int

v) 26}27

28 inline int query(int

x) 34

return

ans;35}

3637

intmain()

3847 sort(e + 1,e + m + 1

,cmp);

48int next = 1;49

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

56 next = e[i].r - 1

;57 ans[e[i].pos] = query(e[i].r) - query(e[i].l - 1

);58}59

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

60 printf("

%d\n

",ans[i]);

61return0;

62 }

洛谷P1972 SDOI2009 HH的項鍊

這道題想了很久,發題解是為了理解的更深刻一點。管理放我過好嘛qwq 步入正題 這道題應該是很多做法,我選擇的是離線 樹狀陣列。首先輸入陣列。用fisrt陣列先記錄元素最開始出現的位置,對應的每乙個樹狀陣列的位置add一下 樹狀陣列洛谷也有模板題的了解一下就ok啦 rep i,1 n 然後倒著更新一遍...

洛谷P1972 SDOI2009 HH的項鍊

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

洛谷 P1972 SDOI2009 HH的項鍊

p1972 sdoi2009 hh的項鍊 法一 樹狀陣列,離線 翻譯 給出乙個數列a n 還有許多請求,請求由l,r兩個數組成,要求對於每個請求輸出數列中從a l 到a r 中不重複的數的個數。方法 首先讀入數列a n 並預處理next1,boo兩個輔助陣列,方法見程式。然後讀入請求,把請求按l從小...