時間限制: 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
32 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 100000struct
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 內每...