P1972 SDOI2009 HH的項鍊(莫隊)

2021-08-16 04:13:51 字數 695 閱讀 5480

給你長度為n的一組數,每次詢問區間有多少個不同的數。

n<100000 m<100000。

聽說暴力能過,但是有點不科學,於是我打了乙個莫隊。莫隊思想就是把左區間分塊,然後暴力,這樣就可以優化到osqrt(o).

#include

#include

#include

#include

#include

#define n 100000

using namespace std;

struct dataq[n];

int n,m,sum=0;

int a[n],ans[n],num[n];

int cmp(const data&a,const data&b)

int add(int

x)int del(int

x)int main()

sort(q+1,q+m+1,cmp);

int l=0,r=0;

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

while (r>q[i].r)

while (l>q[i].l)

while (lans[q[i].id]=sum;

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

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

}

洛谷P1972 SDOI2009 HH的項鍊

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

洛谷P1972 SDOI2009 HH的項鍊

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

洛谷 P1972 SDOI2009 HH的項鍊

1.按每個要求的區間的右端點排序一下 2.樹狀陣列tree j 維護從1到j區間內不同數字的個數有多少個 3.然後用字首和的思想就好 tree r tree l 1 1 include2 include3 include4 define maxn 1000002 5 define next nex ...