【AcWing 243. 一个简单的整数问题2】
例题:【AcWing 243. 一个简单的整数问题2】
题解:
将序列分成N/B块,维护:
id[i] = i/B,i所在块标号
res[id] = 第id块的sum
base[id] = 第id块的add标记
修改时,大块修改base[id],小块修改a[i],同时维护每块的res[id]。询问时,大块使用res[id]信息/小块暴力。
总复杂度O(Q*sqrt(N))。
代码:
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
inline int read(){int s=0,w=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();//s=(s<<3)+(s<<1)+(ch^48);return s*w;
}
const int maxn=1e5+9;
int n,B,q;
int a[maxn];
ll res[maxn],base[maxn];
ll query(int l,int r)
{int idl=l/B,idr=r/B;ll ans=0;if(idl==idr){for(int i=l;i<=r;i++){ans+=a[i]+base[idl];} return ans;}else {for(int i=l;i<(idl+1)*B;i++){ans+=a[i]+base[idl];}for(int i=idl+1;i<idr;i++){ans+=res[i];}for(int i=idr*B;i<=r;i++){ans+=a[i]+base[idr];}//每个复杂度都是√N return ans;}
}
void change(int l,int r,int x)
{int idl=l/B,idr=r/B;ll ans=0;if(idl==idr){for(int i=l;i<=r;i++){a[i]+=x;res[idl]+=x;}}else {for(int i=l;i<(idl+1)*B;i++){a[i]+=x;res[idl]+=x;}for(int i=idl+1;i<idr;i++){base[i]+=x;res[i]+=B*x;}for(int i=idr*B;i<=r;i++){a[i]+=x;res[idr]+=x;}//每个复杂度都是√N }
}
int main()
{cin>>n>>q;B=sqrt(n);for(int i=1;i<=n;i++){cin>>a[i];res[i/B]+=a[i];}char op;int l,r,x;while(q--){cin>>op;if(op=='Q'){cin>>l>>r;cout<<query(l,r)<<endl;}else {cin>>l>>r>>x;change(l,r,x);} }return 0;
}
【AcWing 243. 一个简单的整数问题2】相关推荐
- Vue v-model双向数据绑定和一个简单的整数计算器
一.v-model双向数据绑定 方法 v-bind - 单向数据绑定(从M到V) v-model - 双向数据绑定 例子 <input type="text" v-bind: ...
- 【吕鑫MFC学习】一个简单的MFC程序
开始学习MFC的第一天,实现一个简单的整数计算器用来说明MFC程序的基本流程. 平台:Visual Studio2015 实现的界面: 首先,新建一个MFC应用程序 这里简单说明控制台应用程序.MFC ...
- 实现一个简单的编译器
简单的说 编译器 就是语言翻译器,它一般将高级语言翻译成更低级的语言,如 GCC 可将 C/C++ 语言翻译成可执行机器语言,Java 编译器可以将 Java 源代码翻译成 Java 虚拟机可以执行的 ...
- FFmpeg编写一个简单播放器 -1
2019独角兽企业重金招聘Python工程师标准>>> 指导1:制作屏幕录像 概要 电影文件有很多基本的组成部分.首先,文件本身被称为容器Container,容器的类型决定了信息 ...
- 自己动手实现一个简单的JSON解析器
1. 背景 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.相对于另一种数据交换格式 XML,JSON 有着诸多优点.比如易读性更好,占用空间更少等.在 ...
- 如何用socket构建一个简单的Web Server
2019独角兽企业重金招聘Python工程师标准>>> 背景 现代社会网络应用随处可见,不管我们是在浏览网页.发送电子邮件还是在线游戏都离不开网络应用程序,网络编程正在变得越来越重要 ...
- 【编译原理】构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 7.)(笔记)解释器 interpreter 解析器 parser 抽象语法树AST
[编译原理]让我们来构建一个简单的解释器(Let's Build A Simple Interpreter. Part 7.) 文章目录 python代码 插--后序遍历 C语言代码(有错误) C语言 ...
- 【编译原理】让我们来构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 6.)(python/c/c++版)(笔记)
[编译原理]让我们来构建一个简单的解释器(Let's Build A Simple Interpreter. Part 6.) 文章目录 python代码 C语言代码 总结 今天是这一天:) &quo ...
- 【编译原理】让我们来构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 5.)(python/c/c++版)(笔记)Lexer词法分析程序
[编译原理]让我们来构建一个简单的解释器(Let's Build A Simple Interpreter. Part 5.) 文章目录 python代码 C语言代码 总结 你如何处理像理解如何创建解 ...
最新文章
- bug诞生记——隐蔽的指针偏移计算导致的数据错乱
- (转)static 变量
- 剑指offer九:变态跳台阶
- 安装CentOS 7 遇到的坑
- Html5做webapp中界面适配的问题总结
- 对齐方式有那些_Excel基础:开始菜单之对齐方式,那些被遗忘的实用功能
- F - 上升子序列-超详细注释版
- php 的cookie设置时间,php cookie时间设置的方法
- 8 传输层----TCP
- asp教程一:创建 Active Server Page 页
- java调用nlpir_ZH奶酪:Java调用NLPIR汉语分词系统
- Redis写副本内存不够
- Python实现简单拼音输入法
- 寂寞沙洲冷c语言程序,周传雄《寂寞沙洲冷》吉他谱简单版 酷音小伟吉他弹唱教学吉他谱...
- 一年级上册计算机教学计划,一年级信息技术上册教学计划一年级信息技术教学计划...
- 裁员潮下,你需要这 10 大神器
- Linux下的酷我音乐盒(开源非官方)
- 不小心把苹果手机备忘录删掉怎么恢复
- UltraISO Premium Edition9.7.1.3519完美破解版
- ajax实验,AJAX实验报告.doc
热门文章
- 双十一来了,揭秘菜鸟物流背后的那些算法黑科技
- 微型计算机名词术语,微型计算机及接口技名词解释题及解答题.doc
- java instanceof运算符_Java instanceof 运算符的使用方法
- jq动态获取input的值传给html,jquery 保证html()拿到的html字符串包含input的value值
- java虚拟机工作原理图_Java虚拟机工作原理
- .net html5页面缓存,详解HTML5中的manifest缓存使用
- kuayu react_React+Spring实现跨域问题的完美解决方法
- 存储过程mysql报错1271_mysqldump备份失败以及解决方法汇总
- c++ eos智能合约开发_[EOS智能合约]第二节:用EOS开发一个To-do List小应用
- 三菱plc选型手册_模拟量是什么?PLC和模拟量是如何转换的?