Codeves 4279 線段樹練習5

2022-03-03 08:44:43 字數 2242 閱讀 8999

有n個數和5種操作

add a b c:把區間[a,b]內的所有數都增加c

set a b c:把區間[a,b]內的所有數都設為c

sum a b:查詢區間[a,b]的區間和

max a b:查詢區間[a,b]的最大值

min a b:查詢區間[a,b]的最小值

輸入描述 input description

第一行兩個整數n,m,第二行n個整數表示這n個數的初始值

接下來m行操作,同題目描述

輸出描述 output description

對於所有的sum、max、min詢問,一行輸出乙個答案

樣例輸入 sample input

10 6

3 9 2 8 1 7 5 0 4 6

add 4 9 4

set 2 6 2

add 3 8 2

sum 2 10

max 1 7

min 3 6

樣例輸出 sample output

資料範圍及提示 data size & hint

10%:130%:1100%:1保證中間結果在long long(c/c++)、int64(pascal)範圍內

題解:線段樹基本操作,區間修改,區間加,區間求最大,最小值;

1 #include2 #include3

#define n 100001

4using

namespace

std;

5int

n,m,x,y;

6long

longz;7

long

long

ans;

8struct

node

9tr[n*4

]; 14

void up(int

k)15

20void build(int k,int l,int

r)21

29int mid=l+r>>1

;30 build(k<<1

,l,mid);

31 build(k<<1|1,mid+1

,r);

32up(k);33}

34void down_set(int

k)35

45void down_add(int

k)46

58void addd(int

k)59

68if

(tr[k].v) down_set(k);

69if

(tr[k].add) down_add(k);

70int mid=tr[k].l+tr[k].r>>1;71

if(x<=mid) addd(k<<1

);72

if(y>mid) addd(k<<1|1

);73

up(k);

74}

75void sett(int

k)76

85if

(tr[k].v) down_set(k);

86if

(tr[k].add) down_add(k);

87int mid=tr[k].l+tr[k].r>>1;88

if(x<=mid) sett(k<<1

);89

if(y>mid) sett(k<<1|1

);90

up(k);91}

92void query(int k,int

w)93

101if

(tr[k].v) down_set(k);

102if

(tr[k].add) down_add(k);

103int mid=tr[k].l+tr[k].r>>1

;104

if(x<=mid) query(k<<1

,w);

105if(y>mid) query(k<<1|1

,w);

106}

107int

main()

108120

else

if(ch[1]=='e'

)121

125else

if(ch[1]=='u'

)126

132else

if(ch[1]=='a'

)133

139else

140

146}

147 }

view code

線段樹練習

一鍵挖礦 includeusing namespace std define n 2000010 define int long long define f x x 1 x 3 int n,m,tg n x n y n tx 4 ty 4 ans vectorv n struct vac n va ...

線段樹練習四(線段樹)

description 在平面內有一條長度為n的線段 不計入答案 可以對進行以下2種操作 1 把從x到y的再加一條線段 2 查詢從x到x 1有多少條線段 input 第一行輸入n,m 第2 m 1行,每行2個數x,y,表示從x到y再加一條線段 最後一行輸入2個數,為x和x 1,查詢x到x 1的線段數...

1080 線段樹練習

一行n個方格,開始每個格仔裡都有乙個整數。現在動態地提出一些問題和修改 提問的形式是求某乙個特定的子區間 a,b 中所有元素的和 修改的規則是指定某乙個格仔x,加上或者減去乙個特定的值a。現在要求你能對每個提問作出正確的回答。1 n 100000,提問和修改的總數m 10000條。輸入描述 inpu...