qduoj 帥氣的HYC的珍珠 (樹狀陣列)

2021-08-06 06:42:08 字數 1269 閱讀 1205

描述

帥氣的hyc經常早晨去鍛鍊(多麼好的習慣~。有一天,他看到一路上的露珠,心裡便產生了乙個問題:一路上假如有n棵草,每顆草上可能會有露珠,或者沒有露珠。連續的露珠會和為一體(>=2),並變為珍珠。

比如第1棵草上有露珠,第2棵草也有露珠。那麼就會形成乙個珍珠。第1棵草上有露珠,第2棵草有露珠,第3棵也有露珠,那麼也會形成乙個珍珠。相反,如果第1顆草有露珠,第2棵草沒有露珠,就不會形成珍珠。

現在給你hyc今天早晨一路上的看到的n棵草,以及上面的露珠情況,給你q次詢問,每次詢問[l,r],你能快速的告訴hyc,這個區間能形成多少個珍珠嗎?acceptit!

輸入第1行乙個整數t,表示有t組測試資料。(t<=15)

第2行乙個整數n, 表示有n棵草。(1<=n<=1000)

第3行有n個整數0或者1,中間用空格隔開, 1代表第i課草有露珠,0代表第i棵草沒有露珠。

第4行是乙個整數q, 代表查詢的次數。(1<=q<=100000)

下面第(4+q)行每行兩個整數l, r。 代表查詢的區間[l, r];(1<=l<=r<=n)

輸出對於每組查詢輸出一行。

樣例輸入1

複製

1

41 1 0 1

31 2

2 31 4

樣例輸出1

1

01

檢視隱藏資訊

看了學長的**才會 因為區間查詢時考慮的情況很多 樹狀陣列會比線段樹方便很多

#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

#define maxn 500005

int aa[maxn];

int a[maxn];

int lowbits(int x)

int getsum(int pos)

return ans;

}void update(int pos,int val)

}int main(void)

int ans=getsum(r)-getsum(l-1);

if(a[r]&&a[r-1]&&a[r+1]) ans++;

if(a[l-1]&&a[l]&&!a[l+1]) ans--;

printf("%d\n",ans);}}

return 0;

}

帥氣的HYC的珍珠

思路 維護樹狀陣列也可以,維護陣列也可以。l陣列存放當前是露珠連續的第幾個 sum陣列存放當前1 i 是第幾個珍珠 ans sum r sum l 1 特殊判斷一下 如果1 1 1這種情況 需要 1 sum l sum l 1 1的時候需要 1 判斷是如何轉移過來的 include include ...

qduoj 帥氣的HYC切蛋糕

描述我們的帥氣的hyc獲得了蛋糕後,當然要找小夥伴分享啦,這個蛋糕是乙個半徑為r,高度為h的圓柱形蛋糕,蛋糕上面平鋪一層奶油,由於這個蛋糕太大,於是他找到ltwy幫他切蛋糕。ltwy說要考考他,如果回答正確就幫忙,否則整個蛋糕就歸ltwy了。hyc猶豫了一下,問是什麼問題.ltwy說題目很簡單,將蛋...

qduoj 31 帥氣的HYC 切蛋糕

描述 我們的帥氣的hyc獲得了蛋糕後,當然要找小夥伴分享啦,這個蛋糕是乙個半徑為r,高度為h的圓柱形蛋糕,蛋糕上面平鋪一層奶油,由於這個蛋糕太大,於是他找到ltwy幫他切蛋糕。ltwy說要考考他,如果回答正確就幫忙,否則整個蛋糕就歸ltwy了。hyc猶豫了一下,問是什麼問題.ltwy說題目很簡單,將...