洛谷1972 HH的項鍊(樹狀陣列)

2021-08-30 04:40:42 字數 835 閱讀 5437

剛看完這道題yy了一下線段樹的做法,大概就是維護顏色出現次數,如果區間合併時乙個顏色的個數從0變為1,那麼就出現了一次,cnt++(不過感覺很難寫所以就沒寫)

很明顯可以離線來做,因為不涉及修改操作,所以將所有詢問按左右id進行排序,對於同一顏色,用鍊錶儲存位置,從左向右走的時候向樹狀陣列中更新,然後在樹狀陣列中查詢即可。(結果陣列開小了調了半天233)

#includeusing namespace std;

typedef long long ll;

const ll maxn=1e6+10;

ll n,q,maxx;

ll a[maxn],tr[maxn];

ll head[maxn],nxt[maxn];

ll ans[maxn];

struct ask

ll lowbit(ll x)

void update(ll x,ll v)

ll query(ll x)

int main()

for(register int i=1;i<=maxx;++i)

q=read();

for(register int i=1;i<=q;++i)

sort(quer+1,quer+q+1);

ll last=1;

for(register int i=1;i<=q;++i)

ans[quer[i].id]=query(quer[i].r)-query(quer[i].l-1);

} for(register int i=1;i<=q;++i)

cout

}

洛谷 1972 HH的項鍊

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

洛谷P1972 HH的項鍊 樹狀陣列

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

樹狀陣列 洛谷 P1972 HH的項鍊

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