題目描述 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
3 1
2 3
2 1 2 3 2
2 2 3
樣例輸出 sample output
9資料範圍及提示 data size & hint
資料範圍
1<=n<=200000
1<=q<=200000
指標操作較慢,用f陣列減少操作
#include
#include
using namespace std;
#define n 200005
long
long n,m,k,x,y,z;
long
long d[n*3],f[n*3];
inline long
long
in()
void build(long
long o,long
long l,long
long r)
else d[o]=in();
}void change(long
long o,long
long l,long
long r,long
long data)
long
long m=(l+r)>>1;
if(x<=m) change(o*2,l,m,data);
if(m2+1,m+1,r,data);
d[o]=d[o*2]+d[o*2+1]+f[o]*(r-l+1);
return;
}long
long sum(long
long o,long
long l,long
long r,long
long v)
int main()
else
}return
0;}
codevs 1082 線段樹練習 3
1082 線段樹練習 3 區間修改,區間查詢 時間限制 3 s 空間限制 128000 kb 題目等級 大師 master 給你n個數,有兩種操作 1 給區間 a,b 的所有數增加x 2 詢問區間 a,b 的數的和。輸入描述 input description 第一行乙個正整數n,接下來n行n個整數...
Codevs 1082 線段樹練習 3
1082 線段樹練習 3 時間限制 3 s 空間限制 128000 kb 題目等級 大師 maste 傳送門題目描述 description 給你n個數,有兩種操作 1 給區間 a,b 的所有數增加x 2 詢問區間 a,b 的數的和。輸入描述 input description 第一行乙個正整數n,...
codevs 1082 線段樹練習 3
時間限制 3 s 空間限制 128000 kb 題目等級 大師 master 題解給你n個數,有兩種操作 1 給區間 a,b 的所有數增加x 2 詢問區間 a,b 的數的和。輸入描述 input description 第一行乙個正整數n,接下來n行n個整數,再接下來乙個正整數q,每行表示操作的個數...