codevs4919 线段树练习4
时间:2022-05-08
本文章向大家介绍codevs4919 线段树练习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<N<=10,1<Q<=10
30%:1<N<=10000,1<Q<=10000
100%:1<N<=100000,1<Q<=100000
分类标签 Tags 点此展开
记录好%7的剩余系
暴力统计即可
1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<cmath>
5 #include<algorithm>
6 #define ls k<<1
7 #define rs k<<1|1
8 using namespace std;
9 const int MAXN=2000050;
10 const int INF=0x7fffffff;
11 void read(int &n)
12 {
13 char c='+';int x=0;bool flag=0;
14 while(c<'0'||c>'9'){c=getchar();if(c=='-')flag=1;}
15 while(c>='0'&&c<='9'){x=x*10+(c-48);c=getchar();}
16 flag==1?n=-x:n=x;
17 }
18 struct node
19 {
20 int l,r,f,mod[7];// mod7的余数的个数
21 }tree[MAXN];
22 int ans=0;
23 int p[7];
24 inline void update(int k)
25 {
26 for(int i=0;i<7;i++) tree[k].mod[i]=tree[ls].mod[i]+tree[rs].mod[i];
27 }
28 int down(int k)
29 {
30 for(int i=0;i<7;i++) p[ (i+tree[k].f)%7 ]=tree[ls].mod[i];
31 for(int i=0;i<7;i++) tree[ls].mod[i]=p[i];
32 for(int i=0;i<7;i++) p[ (i+tree[k].f)%7 ]=tree[rs].mod[i];
33 for(int i=0;i<7;i++) tree[rs].mod[i]=p[i];
34 tree[ls].f=tree[k].f;tree[rs].f=tree[k].f;
35 tree[k].f=0;
36 }
37 void Build_Tree(int k,int ll,int rr)
38 {
39 tree[k].l=ll;tree[k].r=rr;
40 if(tree[k].l==tree[k].r)
41 {
42 int p;read(p);
43 ++tree[k].mod[p%7];
44 return ;
45 }
46 if(tree[k].f) down(k);
47 int mid=tree[k].l+tree[k].r>>1;
48 Build_Tree(ls,ll,mid); Build_Tree(rs,mid+1,rr);
49 update(k);
50 }
51 void Interval_Count(int k,int ll,int rr)
52 {
53 if(ll<=tree[k].l&&tree[k].r<=rr)
54 {
55 ans+=tree[k].mod[0];
56 return ;
57 }
58 if(tree[k].f) down(k);
59 int mid=tree[k].l+tree[k].r>>1;
60 if(ll<=mid) Interval_Count(ls,ll,rr);
61 if(rr>mid) Interval_Count(rs,ll,rr);
62 }
63 void Interval_Add(int k,int ll,int rr,int val)
64 {
65 if(ll<=tree[k].l&&tree[k].r<=rr)
66 {
67 for(int i=0;i<7;i++) p[ (i+val)%7 ]=tree[k].mod[i];
68 for(int i=0;i<7;i++) tree[k].mod[i]=p[i];
69 tree[k].f=val;
70 return ;
71 }
72 if(tree[k].f) down(k);
73 int mid=tree[k].l+tree[k].r>>1;
74 if(ll<=mid) Interval_Add(ls,ll,rr,val);
75 if(rr>mid) Interval_Add(rs,ll,rr,val);
76 update(k);
77 }
78 int main()
79 {
80 int n,m;
81 read(n);
82 Build_Tree(1,1,n);
83 read(m);
84 for(int i=1;i<=m;i++)
85 {
86 char s[10];
87 scanf("%s",s);
88 if(s[0]=='c')//统计能被7整除的数的个数
89 {
90 int x,y;read(x);read(y);ans=0;
91 Interval_Count(1,x,y);
92 printf("%dn",ans);
93 }
94 else
95 {
96 int x,y,val;read(x);read(y);read(val);
97 Interval_Add(1,x,y,val);
98 }
99 }
100 return 0;
101 }
- XML Serializable Generic Dictionary
- MATLAB简易验证码识别程序介绍
- android之listview缓存图片(缓存优化)
- 使用ASP.NET实现Model View Presenter(MVP)
- android性能优化1
- 百度地图之收索视野内的建筑物
- Line Counter - Writing a Visual Studio 2005 Add-In
- 百度地图之标注聚会
- How to Add an API to your Web Service
- 「微信小程序」剖析(四):原生的实时DOM转Virtual DOM
- 让你的「微信小程序」运行在Chrome浏览器上,让我们使用WebStorm
- android上拉下拉加载更多数据
- 「微信小程序」剖析(二):框架原理 | 在桌面浏览器上运行的尝试
- Working with Windows Workflow Foundation in ASP.NET
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Bashtop:一款功能强大的LinuxOSXFreeBSD资源监控工具
- iOS 推送手机消息背后的技术
- 手把手教你使用 cert-manager 签发免费证书
- flink源码分析之TaskManager启动篇
- 【面试说】一年半前端 Bigo 一二三 面
- 【前端进阶】深入浅出浏览器事件循环【内附练习题】
- 【面试说】一年半前端 Shopee 面经
- 【前端进阶】深入浅出 JavaScript 中的 this
- 手把手带你玩转 AWS Lambda
- Guava 中的 Stopwatch 是个什么鬼?
- Mybatis接口Mapper内的方法为啥不能重载?
- 基于K-Means聚类算法的主颜色提取
- 扩展之Tensorflow2.0 | 21 Keras的API详解(下)池化、Normalization层
- 一个真实问题,搞定三个冷门pandas函数
- conda管理C源代码程序的时候总是出现库文件冲突或者缺失