codevs 1082 線段樹練習 3

2022-05-15 09:33:13 字數 1700 閱讀 9117

時間限制: 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

1 2 3 2

2 2 3

樣例輸出 sample output

資料範圍及提示 data size & hint

資料範圍

1<=n<=200000

1<=q<=200000

#include#include

#include

#include

using

namespace

std;

struct

treenodetype;

struct treenodetype tree[1000000*4+15

];long

long

intn,m,a,b,x,s1,s2,if_,s;

void tree_up(int

now)

void tree_down(int

now)

void tree_build(int now,int l,int

r)

long

long

int mid=(tree[now].l+tree[now].r)/2

; tree_build(now*2

,l,mid);

tree_build(now*2+1,mid+1

,r);

tree_up(now);

}void tree_change(long

long

int k,long

long

int l,long

long

int r,long

long

intx)

if(tree[k].flag) tree_down(k);

long

long

int mid=(tree[k].l+tree[k].r)/2

;

if(l>mid) tree_change(k*2+1

,l,r,x);

else

if(r<=mid) tree_change(k*2

,l,r,x);

else

tree_up(k);

}long

long

int tree_find(long

long

int now,long

long

int l,long

long

intr)

intmain()

else

}return0;

}

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,...

Codevs1082 線段樹練習 3

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