【問題描述】
給定一數列,規定有兩種操作,一是修改某個元素,二是求區間的連續和。
【輸入格式】
輸入資料第一行包含兩個正整數n,m(n<=100000,m<=500000)。
以下是m行,每行有三個正整數k,a,b(k=0或1、 a,b<=n)。k=0時表示將a處數字加上b,k=1時表示詢問區間[a,b]內所有數的和。
【輸出格式】
對於每個詢問輸出對應的答案。
【程式**】
#includeusing namespace std;
const int maxn=100001;
int n,m,a[maxn],seg[maxn*4];//線段樹陣列要開大4倍
void pushup(int cur)
void build(int cur,int l,int r)
}void update(int cur,int l,int r,int x,int val)
int mid=(l+r)/2;
if(x<=mid)
update(cur<<1,l,mid,x,val);
else
update(cur<<1|1,mid+1,r,x,val);
pushup(cur);
}int rangesum(int cur,int l,int r,int x,int y)
int main() {
int a,b,c;
cin>>n>>m;
build(1,1,n);
while(m--) {
cin>>a>>b>>c;
if(a==0) update(1,1,n,b,c);
else cout<
【參考文獻】
單點更新,區間查詢線段樹
線段樹的空間複雜度是4n include include include using namespace std const int maxn 100005 const int inf 0x3f3f3f3f int n,a maxn struct node 結點 tree maxn 4 樹結點儲存陣...
線段樹 學習 模板 單點更新 區間更新
線段樹是幹什麼的?有一列數,每次可以進行以下三種操作中的一種 1 給指定區間中的每個數都加上某個值 2 將指定區間內的所有數置成某乙個統一的值 3 詢問乙個區間上的最小值 最大值 所有數的和。樸素做法怎麼做?用線性表儲存,每種操作,對待處理或待詢問區間中的每個元素都逐一進行處理。複雜度多少?假設這個...
I Hate It 線段樹單點更新區間查詢
很多學校流行一種比較的習慣。老師們很喜歡詢問,從某某到某某當中,分數最高的是多少。這讓很多學生很反感。不管你喜不喜歡,現在需要你做的是,就是按照老師的要求,寫乙個程式,模擬老師的詢問。當然,老師有時候需要更新某位同學的成績。input 本題目包含多組測試,請處理到檔案結束。在每個測試的第一行,有兩個...