codevs 1082 線段樹練習 3

2021-07-29 08:48:14 字數 1439 閱讀 4195

1082 線段樹練習 3 區間修改,區間查詢;

時間限制: 3 s

空間限制: 128000 kb

題目等級 : 大師 master

給你n個數,有兩種操作:

1:給區間[a,b]的所有數增加x

2:詢問區間[a,b]的數的和。

輸入描述 input description

第一行乙個正整數n,接下來n行n個整數,

再接下來乙個正整數q,每行表示操作的個數,

如果第乙個數是1,後接3個正整數,

表示在區間[a,b]內每個數增加x,如果是2,

表示操作2詢問區間[a,b]的和是多少。

pascal選手請不要使用readln讀入

輸出描述 output description

對於每個詢問輸出一行乙個答案

樣例輸入 sample input

31 2 3 2

2 2 3

樣例輸出 sample output

9資料範圍及提示 data size & hint

資料範圍

1<=n<=200000

1<=q<=200000

#include

#include

#include

using

namespace

std;

const

int sz=200000+50;

struct seg_tree t[sz<<2];

int n,a,q,x,y,z;

long

long v[sz];

void updata(int m)

void build(int m,int ll,int rr)

int mid=(ll+rr)>>1;

build(m<<1,ll,mid);

build(m<<1|1,mid+1,rr);

updata(m);

}void add(int m,int vv)

void spread(int m)

return ;

}long

long ask(int m,int ll,int rr)

void change(int m,int ll,int rr,int vv)

int mid=(t[m].l+t[m].r)>>1;

spread(m);

if(mid>=ll) change(m<<1,ll,rr,vv);

if(mid1|1,ll,rr,vv);

updata(m);

return ;

}int main()

else

scanf("%d%d",&x,&y),printf("%lld\n",ask(1,x,y));

}return

0;}

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,每行表示操作的個數...

Codevs1082 線段樹練習 3

題目描述 description 給你n個數,有兩種操作 1 給區間 a,b 的所有數增加x 2 詢問區間 a,b 的數的和。輸入描述 input description 第一行乙個正整數n,接下來n行n個整數,再接下來乙個正整數q,每行表示操作的個數,如果第乙個數是1,後接3個正整數,表示在區間 ...