題目描述 description 給你n個數,有兩種操作:
1:給區間[a,b]的所有數增加x
2:詢問區間[a,b]的數的和。
輸入描述 input description 第一行乙個正整數n,接下來n行n個整數,再接下來乙個正整數q,每行表示操作的個數,如果第乙個數是1,後接3個正整數,表示在區間[a,b]內每個數增加x,如果是2,表示操作2詢問區間[a,b]的和是多少。
輸出描述 output description 對於每個詢問輸出一行乙個答案
樣例輸入 sample input 312
321 2 3 2
2 2 3
樣例輸出 sample output 9
資料範圍及提示 data size & hint 1<=n<=200000
1<=q<=200000
# include # include # define n 5000000
using namespace std;
struct node;
node st[n];
int a[n];
void build(int v,int l,int r)
int mid = (l+r)/2;
build(v*2,l,mid);
build(v*2+1,mid+1,r);
st[v].sum=st[v*2].sum + st[v*2+1].sum;
}void insert(int v,int l,int r,long long c)
int mid = (st[v].l+st[v].r)/2; // 向下更新
if (r<=mid) insert(v*2,l,r,c);
else if (l>mid) insert(v*2+1,l,r,c);
else
}long long getsum(int v,int l,int r)
int main()
build(1,1,n);
int m,t,l,r,c;
for (scanf("%d",&m);m;m--)else
} return 0;
}
線段樹 區間求和
給定一數列,規定有兩種操作,一是修改某個元素,二是求區間的連續和。輸入資料第一行包含兩個正整數n,m n 100000,m 500000 以下是m行,每行有三個正整數k,a,b k 0或1,a,b n k 0時表示將a處數字加上b,k 1時表示詢問區間 a,b 內所有數的和。對於每個詢問輸出對應的答...
線段樹(區間更新求和)
poj 3468 include using namespace std define max 100100 struct node 求區間長度 int get dis node tree max 3 long long d max 建樹 long long build int left,int r...
線段樹 區間求和模板 (區間修改)
include include include include include include include include include define mem a memset a,0,sizeof a define mem2 a memset a,1,sizeof a define mod ...