日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CodeVs——T 4919 线段树练习4

發(fā)布時間:2023/12/20 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CodeVs——T 4919 线段树练习4 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

http://codevs.cn/problem/4919/

?時間限制: 1 s ?空間限制: 128000 KB ?題目等級 : 黃金 Gold 題解 ?查看運行結(jié)果 題目描述?Description

給你N個數(shù),有兩種操作

1:給區(qū)間[a,b]內(nèi)的所有數(shù)都增加X

2:詢問區(qū)間[a,b]能被7整除的個數(shù)

輸入描述?Input Description

第一行一個正整數(shù)n,接下來n行n個整數(shù),再接下來一個正整數(shù)Q,表示操作的個數(shù). 接下來Q行每行若干個整數(shù)。如果第一個數(shù)是add,后接3個正整數(shù)a,b,X,表示在區(qū)間[a,b]內(nèi)每個數(shù)增加X,如果是count,表示統(tǒng)計區(qū)間[a,b]能被7整除的個數(shù)

輸出描述?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

數(shù)據(jù)范圍及提示?Data Size & Hint

10%:1<N<=10,1<Q<=10

30%:1<N<=10000,1<Q<=10000

100%:1<N<=100000,1<Q<=100000

?

1 #include <algorithm> 2 #include <cstdio> 3 4 using namespace std; 5 6 const int N(100000+5); 7 int n,x,y,z,q; 8 9 #define lc (now<<1) 10 #define rc (now<<1|1) 11 #define mid (l+r>>1) 12 struct AC_Tree 13 { 14 int val[7],flag; 15 }tree[N<<2]; 16 inline void pushup(int now) 17 { 18 for(int i=0;i<7;i++) 19 tree[now].val[i]=tree[lc].val[i]+tree[rc].val[i]; 20 } 21 inline void pushdown(int now) 22 { 23 int temp[7],flag=tree[now].flag; tree[now].flag=0; 24 tree[lc].flag+=flag; tree[rc].flag+=flag; 25 for(int i=0;i<7;i++) temp[i]=tree[lc].val[i]; 26 for(int i=0;i<7;i++) tree[lc].val[((i+flag)%7)]=temp[i]; 27 for(int i=0;i<7;i++) temp[i]=tree[rc].val[i]; 28 for(int i=0;i<7;i++) tree[rc].val[((i+flag)%7)]=temp[i]; 29 } 30 void Build(int now,int l,int r) 31 { 32 if(l==r) 33 { 34 scanf("%d",&x); 35 tree[now].val[x%7]++; 36 return ; 37 } 38 Build(lc,l,mid); 39 Build(rc,mid+1,r); 40 pushup(now); 41 } 42 void Change(int now,int l,int r,int L,int R,int x) 43 { 44 if(l==L&&r==R) 45 { 46 int temp[7]; 47 tree[now].flag+=x; 48 for(int i=0;i<7;i++) temp[i]=tree[now].val[i]; 49 for(int i=0;i<7;i++) tree[now].val[(i+x)%7]=temp[i]; 50 return ; 51 } 52 if(tree[now].flag) pushdown(now); 53 if(R<=mid) Change(lc,l,mid,L,R,x); 54 else if(L>mid) Change(rc,mid+1,r,L,R,x); 55 else Change(lc,l,mid,L,mid,x),Change(rc,mid+1,r,mid+1,R,x); 56 pushup(now); 57 } 58 int Query(int now,int l,int r,int L,int R) 59 { 60 if(l==L&&r==R) return tree[now].val[0]; 61 if(tree[now].flag) pushdown(now); 62 if(R<=mid) return Query(lc,l,mid,L,R); 63 else if(L>mid) return Query(rc,mid+1,r,L,R); 64 else return Query(lc,l,mid,L,mid)+Query(rc,mid+1,r,mid+1,R); 65 } 66 67 int main() 68 { 69 scanf("%d",&n); 70 Build(1,1,n); 71 scanf("%d",&q); 72 for(char s[5];q--;) 73 { 74 scanf("%s%d%d",s,&x,&y); 75 if(s[0]=='a') 76 { 77 scanf("%d",&z); 78 Change(1,1,n,x,y,z); 79 } 80 else printf("%d\n",Query(1,1,n,x,y)); 81 } 82 return 0; 83 }

?

轉(zhuǎn)載于:https://www.cnblogs.com/Shy-key/p/7263973.html

總結(jié)

以上是生活随笔為你收集整理的CodeVs——T 4919 线段树练习4的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。