网站建设全屏,网站对位,自己有域名如何做网站,出口网站平台http://codevs.cn/problem/4919/ 时间限制: 1 s空间限制: 128000 KB题目等级 : 黄金 Gold题解查看运行结果题目描述 Description给你N个数#xff0c;有两种操作 1#xff1a;给区间[a,b]内的所有数都增加X 2#xff1a;询问区间[a,b]能被7整除的个数 输入描述 Input Descri… http://codevs.cn/problem/4919/ 时间限制: 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%:1N10,1Q10 30%:1N10000,1Q10000 100%:1N100000,1Q100000 1 #include algorithm2 #include cstdio3 4 using namespace std;5 6 const int N(1000005);7 int n,x,y,z,q;8 9 #define lc (now1)
10 #define rc (now1|1)
11 #define mid (lr1)
12 struct AC_Tree
13 {
14 int val[7],flag;
15 }tree[N2];
16 inline void pushup(int now)
17 {
18 for(int i0;i7;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],flagtree[now].flag; tree[now].flag0;
24 tree[lc].flagflag; tree[rc].flagflag;
25 for(int i0;i7;i) temp[i]tree[lc].val[i];
26 for(int i0;i7;i) tree[lc].val[((iflag)%7)]temp[i];
27 for(int i0;i7;i) temp[i]tree[rc].val[i];
28 for(int i0;i7;i) tree[rc].val[((iflag)%7)]temp[i];
29 }
30 void Build(int now,int l,int r)
31 {
32 if(lr)
33 {
34 scanf(%d,x);
35 tree[now].val[x%7];
36 return ;
37 }
38 Build(lc,l,mid);
39 Build(rc,mid1,r);
40 pushup(now);
41 }
42 void Change(int now,int l,int r,int L,int R,int x)
43 {
44 if(lLrR)
45 {
46 int temp[7];
47 tree[now].flagx;
48 for(int i0;i7;i) temp[i]tree[now].val[i];
49 for(int i0;i7;i) tree[now].val[(ix)%7]temp[i];
50 return ;
51 }
52 if(tree[now].flag) pushdown(now);
53 if(Rmid) Change(lc,l,mid,L,R,x);
54 else if(Lmid) Change(rc,mid1,r,L,R,x);
55 else Change(lc,l,mid,L,mid,x),Change(rc,mid1,r,mid1,R,x);
56 pushup(now);
57 }
58 int Query(int now,int l,int r,int L,int R)
59 {
60 if(lLrR) return tree[now].val[0];
61 if(tree[now].flag) pushdown(now);
62 if(Rmid) return Query(lc,l,mid,L,R);
63 else if(Lmid) return Query(rc,mid1,r,L,R);
64 else return Query(lc,l,mid,L,mid)Query(rc,mid1,r,mid1,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 } 转载于:https://www.cnblogs.com/Shy-key/p/7263973.html