洛谷 P1972 HH的項鍊

2021-09-20 03:06:28 字數 991 閱讀 4074

題意:查詢某一區間顏色數

思路:對於固定區間來說,顏色數隻與各種顏色第一次出現的位置有關。該位置置1,該顏色其餘位置置0.

#include using namespace std;

typedef long long ll;

typedef pairpii;

typedef pairpiii;

const ll maxn =500000 + 100;

const ll maxv =1000000 + 100;

const ll maxq = 500000 + 100;

const ll inf = 0x3f3f3f3f3f3f;

ll vis[maxv],a[maxn],last[maxv],b[maxn],n,ne[maxn],ans[maxq];

vectorve;

void init( ll n )

ll lowbit( ll x )

void add( ll x,ll v )

}ll ask( ll x )

return re;

}int main()

scanf("%lld",&m);

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

sort( ve.begin(),ve.end() );

memset( vis,0,sizeof( vis ) );

memset( last,0x3f,sizeof( last ) );

for( ll i = n;i >= 1;i-- )

for( ll i = 1;i <= n;i++ )

}ll l = 1;

for( ll i = 0;i < ve.size();i++ )

}ans[id] = ask( r ) - ask( l-1 );

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

return 0;

}

洛谷P1972 HH的項鍊

傳送門啦 分析 題目描述不說了,大意是,求一段區間內不同元素的種數。看到區間,我們大概先想到的是暴力 然後炸掉 線段樹 樹狀陣列 分塊。下面給出的是一種樹狀陣列的想法。首先,對於每一段區間裡的數,如果出現重複的元素,我們只需要看最後乙個就好了。所以,我們可以對所有需要查詢區間的右端點進行從小到大的排...

洛谷P1972 HH的項鍊 樹狀陣列

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

樹狀陣列 洛谷 P1972 HH的項鍊

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