codevs 4919 線段樹練習4

2022-04-04 23:11:16 字數 1759 閱讀 6592

時間限制: 1 s

空間限制: 128000 kb

題目等級 : ** gold

題目描述 description

給你n個數,有兩種操作

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

2:詢問區間[a,b]能被7整除的個數

輸入描述 input description

第一行乙個正整數n,接下來n行n個整數,再接下來乙個正整數q,表示操作的個數. 接下來q行每行若干個整數。如果第乙個數是add,後接3個正整數a,b,x,表示在區間[a,b]內每個數增加x,如果是count,表示統計區間[a,b]能被7整除的個數

輸出描述 output description

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

樣例輸入 sample input

2 3 4

6count 1 3

count 1 2

add 1 3 2

count 1 3

add 1 3 3

count 1 3

樣例輸出 sample output

資料範圍及提示 data size & hint

10%:130%:1100%:1用節點的餘數來統計被整除的個數 

修改節點的值時 建立臨時陣列訪問統計的個數 

然後交換過來

屠龍寶刀點選就送

#include #define max 100000

struct

node

tr[max

<<2|1

];int

n,m,a;

void up(int

k)void read(int &x)

while(ch>='

0'&&ch<='9'

)

x=f?x:(~x)+1;}

void build(int k,int l,int

r)

int mid=(l+r)>>1

; build(k

<<1

,l,mid);

build(k

<<1|1,mid+1

,r);

up(k);

}void pushdown(int

k)

for(int i=0;i<=6;i++) tr[k<<1|1].num[(i+tr[k].flag)%7]=tmp[i];

tr[k].flag=0;}

int section_query(int k,int l,int

r)void section_change(int k,int l,int r,int

v)

if(tr[k].flag) pushdown(k);

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

;

if(l>mid) section_change(k<<1|1

,l,r,v);

else

if(r<=mid) section_change(k<<1

,l,r,v);

else section_change(k<<1,l,mid,v),section_change(k<<1|1,mid+1

,r,v);

up(k);

}int

main()

else

if(str[1]=='a'

)

}return0;

}

Codevs 4919 線段樹練習4

4919 線段樹練習4 時間限制 1 s 空間限制 128000 kb 題目等級 gold 題目描述 description 給你n個數,有兩種操作 1 給區間 a,b 內的所有數都增加x 2 詢問區間 a,b 能被7整除的個數 輸入描述 input description 第一行乙個正整數n,接下...

codevs 4919 線段樹練習4

題目描述 description 給你n個數,有兩種操作 1 給區間 a,b 內的所有數都增加x 2 詢問區間 a,b 能被7整除的個數 輸入描述 input description 第一行乙個正整數n,接下來n行n個整數,再接下來乙個正整數q,表示操作的個數.接下來q行每行若干個整數。如果第乙個數...

codevs 線段樹練習4

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