描述
帥氣的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樣例輸出141 1 0 1
31 2
2 31 4
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說題目很簡單,將...