4919 線段樹練習4
時間限制: 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
3 2 3 4
6 count 1 3
count 1 2
add 1 3 2
count 1 3
add 1 3 3
count 1 3
樣例輸出 sample output
0 0
0 1
資料範圍及提示 data size & hint
10%:1
#include
#include
#include
using namespace std;
struct node*root=null;
int n,m,a[100010];
int init()
while(s>='0'&&s<='9')
if(f==1)return -x;return x;
}void sum_bage(node *cur)
void built(node *&cur,int l,int r)
int mid=(l+r)>>1;
built(cur->child[0],l,mid);
built(cur->child[1],mid+1,r);
sum_bage(cur);
}void down(node *cur)
for(int i=0;i<=6;i++)
cur->child[1]->s[(i+ cur->lazy)%7]=tmp[i];
cur->lazy = 0;
}int query(node* cur,int l,int r)
void change(node* cur,int l,int r,int
value)
if(cur->lazy) down(cur);
int mid=(cur->l + cur->r)>>1;
if(l>mid) change(cur->child[1],l,r,value);
else
if(r<=mid) change(cur->child[0],l,r,value);
else change(cur->child[0],l,mid,value),
change(cur->child[1],mid+1,r,value);
sum_bage(cur);
return ;
}int main()
else
if(ss[0]=='a')
}return
0;}
用s陣列表示 該區間內部 餘數為1、2、3…的分別有幾個,修改時開乙個臨時陣列,copy一下~~
陣列版:
#include#include#includeusing namespace std;
#define max 100000
struct nodetre[max<<2|1];
int read()
while(s>='0'&&s<='9')
return x*f;
}int n,m;
void sum(int
now)
void built(int
now,int l,int r)
intmid=(l+r) >> 1;
built(now
<<1,l,mid);
built(now
<<1|1,mid+1,r);
sum(now);
}void down(int
now)
for(int i=0;i<=6;i++)
tre[now
<<1|1].s[(i+tre[now].lazy)%7] = tmp[i];
tre[now].lazy = 0;
}int query(int
now,int l,int r)
void change(int
now,int l,int r,int p)
if(tre[now].lazy) down(now);
intmid=(tre[now].l + tre[now].r)>>1;
if(l>mid) change(now
<<1|1,l,r,p);
else
if(r<=mid) change(now
<<1,l,r,p);
else change(now
<<1,l,mid,p),
change(now
<<1|1,mid+1,r,p);
sum(now);
}int main()
else
if(str[0] == 'a')
}return 0;
}
codevs 4919 線段樹練習4
時間限制 1 s 空間限制 128000 kb 題目等級 gold 題目描述 description 給你n個數,有兩種操作 1 給區間 a,b 內的所有數都增加x 2 詢問區間 a,b 能被7整除的個數 輸入描述 input description 第一行乙個正整數n,接下來n行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 內每...