题目:
给出 N 个整数 A1,A2,…,AN,你需要处理区间加,区间求和。
输入格式
第一行两个整数 N 和 Q (1≤N,Q≤10^5)。
第二行 N 个整数,表示 A1,A2…AN(∣Ai∣≤10^9)的初始值。
接下来 Q 行,每行一个操作:
C a b c,表示 Aa,Aa+1…Ab 每个数加 c (∣c∣≤10000)。
Q a b,表示询问 Aa,Aa+1…Ab 的和,答案可能超过 32 位整数。
输出格式
对于所有 Q 询问,一行输出一个答案。
样例输入
10 5
1 2 3 4 5 6 7 8 9 10
Q 4 4
Q 1 10
Q 2 4
C 3 6 3
Q 2 4
1
2
3
4
5
6
7
样例输出
4
55
9
15
AC代码:线段树区间求和
#include<iostream>
using namespace std;
const int MAX_N = 1000005;
long long int s[4 * MAX_N],col[4 * MAX_N];
void up(int p){
s[p] = s[p * 2] + s[p * 2 + 1];
}
void down(int p,int l,int r){
if(col[p]){
int mid = (l + r) / 2;
s[p * 2] += col[p] * (mid