區間查詢(樹狀陣列之差點問線問題)

2021-06-29 15:02:03 字數 906 閱讀 7972

時間限制:2 sec

記憶體限制:32 mb

提交:162

解決:62

提交狀態

現在問你第i個視窗到第j個視窗一共有多少人在排隊?

每組輸入的第一行是乙個正整數n(n<=30000),表示食堂有n個視窗。

接下來一行輸入n個正整數,第i個正整數ai表示第i個視窗最開始有ai個人排隊。(1<=ai<=50)

接下來每行有一條命令,命令有四種形式:

(1)add i j,i和j為正整數,表示第i個視窗增加j個人(j不超過30);

(2)sub i j,i和j為正整數,表示第i個視窗減少j個人(j不超過30);

(3)query i j,i和j為正整數,i<=j,表示詢問第i到第j個視窗的總人數;

(4)end 表示結束,這條命令在每組資料最後出現;

每組資料最多有40000條命令。

然後對於每個query詢問,輸出乙個整數,佔一行,表示詢問的段中的總人數,這個數保持在int以內。

#include#include#includeusing namespace std;

int n,c1[30010];

int lowbit(int n)

int add(int i,int data)

}long long sum(int i)

return sum1;

}int main()

while(cin>>c)

else if(strcmp(c,"add")==0)

else if(strcmp(c,"sub")==0)

else}}

}

樹狀陣列 區間修改,區間查詢

也許更好的閱讀體驗 好東西,以後可以不打線段樹了 本篇假定讀者都會最基礎的兩種樹狀陣列,即區改單查和單改區查 思考如何維護乙個區間的值,想到了差分 對乙個差分陣列做一次字首和可以得到每個位置的值 再對每個位置累加一下就是乙個區間的值 公式化的講,就是 設差分陣列為 c 則每個位置的值 val i s...

樹狀陣列區間修改區間查詢

題面 首先,我們要推乙個柿子。displaystyle sum a i 把a i 用差分陣列表示出來,就可以寫成 displaystyle sum sum d i 我們考慮一下,每個d i 出現的次數是一定的。那我們可以換一下列舉順序,先列舉d i 在列舉他出現的次數,就可以變成 displayst...

樹狀陣列(單點修改和區間查詢問題)

今天剛學了樹狀陣列,理解還不是很透徹,寫點東西加深理解 記憶 c陣列表示樹狀陣列,a陣列表示普通的陣列 下面用乙個模板題來講解 洛谷 樹狀陣列1 乙個很常見也很簡單的單點修改和區間查詢問題。在學樹狀陣列前有兩種比較常見的解法 單點修改直接修改值,區間查詢時間複雜度是o n 使用字首和優化區間查詢,這...