無
hh 有一串由各種漂亮的貝殼組成的項鍊。hh 相信不同的貝殼會帶來好運,所以每次散步完後,他都會隨意取出一段貝殼,思考它們所表達的含義。hh 不斷地收集新的貝殼,因此,他的項鍊變得越來越長。有一天,他突然提出了乙個問題:某一段貝殼中,包含了多少種不同的貝殼?這個問題很難回答……因為項鍊實在是太長了。於是,他只好求助睿智的你,來解決這個問題。
輸入格式:
第一行:乙個整數n,表示項鍊的長度。
第二行:n 個整數,表示依次表示項鍊中貝殼的編號(編號為0 到1000000 之間的整數)。
第三行:乙個整數m,表示hh 詢問的個數。
接下來m 行:每行兩個整數,l 和r(1 ≤ l ≤ r ≤ n),表示詢問的區間。
輸出格式:
m 行,每行乙個整數,依次表示詢問對應的答案。
輸入樣例#1:複製
61 2 3 4 3 5
31 2
3 52 6
輸出樣例#1:複製
224
資料範圍:
對於100%的資料,n <= 500000,m <= 500000。
題解:莫隊題目,能拿70分,然後就tle了(uoj 10分,氣憤)
更新!!!100分,l=1開始就可以了
#include#include#include
#include
#include
#include
#include
#include
using
namespace
std;
const
int n=1000005
;inline
intget
()
while (c>='
0'&&c<='9'
)
return res*f;
}struct
nodee[n];
inta[n],n,m,jjj[n],f[n],ans,k;
bool
cmp(node p,node q)
void add(int
x)void remove(int
x)int
main()
sort(e+1,e+m+1
,cmp);
int l=1,r=0
;//原來是l=r=0,氣憤,l從1開始就100了
for(int i=1;i<=m;i++)
for(int i=1;i<=m;i++)
printf(
"%d\n
",jjj[i]);
return0;
}
洛谷1972 HH的項鍊(樹狀陣列)
剛看完這道題yy了一下線段樹的做法,大概就是維護顏色出現次數,如果區間合併時乙個顏色的個數從0變為1,那麼就出現了一次,cnt 不過感覺很難寫所以就沒寫 很明顯可以離線來做,因為不涉及修改操作,所以將所有詢問按左右id進行排序,對於同一顏色,用鍊錶儲存位置,從左向右走的時候向樹狀陣列中更新,然後在樹...
洛谷 P1972 HH的項鍊
題意 查詢某一區間顏色數 思路 對於固定區間來說,顏色數隻與各種顏色第一次出現的位置有關。該位置置1,該顏色其餘位置置0.include using namespace std typedef long long ll typedef pairpii typedef pairpiii const l...
洛谷P1972 HH的項鍊
傳送門啦 分析 題目描述不說了,大意是,求一段區間內不同元素的種數。看到區間,我們大概先想到的是暴力 然後炸掉 線段樹 樹狀陣列 分塊。下面給出的是一種樹狀陣列的想法。首先,對於每一段區間裡的數,如果出現重複的元素,我們只需要看最後乙個就好了。所以,我們可以對所有需要查詢區間的右端點進行從小到大的排...