例题:【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】相关推荐

  1. Vue v-model双向数据绑定和一个简单的整数计算器

    一.v-model双向数据绑定 方法 v-bind - 单向数据绑定(从M到V) v-model - 双向数据绑定 例子 <input type="text" v-bind: ...

  2. 【吕鑫MFC学习】一个简单的MFC程序

    开始学习MFC的第一天,实现一个简单的整数计算器用来说明MFC程序的基本流程. 平台:Visual Studio2015 实现的界面: 首先,新建一个MFC应用程序 这里简单说明控制台应用程序.MFC ...

  3. 实现一个简单的编译器

    简单的说 编译器 就是语言翻译器,它一般将高级语言翻译成更低级的语言,如 GCC 可将 C/C++ 语言翻译成可执行机器语言,Java 编译器可以将 Java 源代码翻译成 Java 虚拟机可以执行的 ...

  4. FFmpeg编写一个简单播放器 -1

    2019独角兽企业重金招聘Python工程师标准>>> 指导1:制作屏幕录像 概要   电影文件有很多基本的组成部分.首先,文件本身被称为容器Container,容器的类型决定了信息 ...

  5. 自己动手实现一个简单的JSON解析器

    1. 背景 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.相对于另一种数据交换格式 XML,JSON 有着诸多优点.比如易读性更好,占用空间更少等.在 ...

  6. 如何用socket构建一个简单的Web Server

    2019独角兽企业重金招聘Python工程师标准>>> 背景 现代社会网络应用随处可见,不管我们是在浏览网页.发送电子邮件还是在线游戏都离不开网络应用程序,网络编程正在变得越来越重要 ...

  7. 【编译原理】构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 7.)(笔记)解释器 interpreter 解析器 parser 抽象语法树AST

    [编译原理]让我们来构建一个简单的解释器(Let's Build A Simple Interpreter. Part 7.) 文章目录 python代码 插--后序遍历 C语言代码(有错误) C语言 ...

  8. 【编译原理】让我们来构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 6.)(python/c/c++版)(笔记)

    [编译原理]让我们来构建一个简单的解释器(Let's Build A Simple Interpreter. Part 6.) 文章目录 python代码 C语言代码 总结 今天是这一天:) &quo ...

  9. 【编译原理】让我们来构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 5.)(python/c/c++版)(笔记)Lexer词法分析程序

    [编译原理]让我们来构建一个简单的解释器(Let's Build A Simple Interpreter. Part 5.) 文章目录 python代码 C语言代码 总结 你如何处理像理解如何创建解 ...

最新文章

  1. bug诞生记——隐蔽的指针偏移计算导致的数据错乱
  2. (转)static 变量
  3. 剑指offer九:变态跳台阶
  4. 安装CentOS 7 遇到的坑
  5. Html5做webapp中界面适配的问题总结
  6. 对齐方式有那些_Excel基础:开始菜单之对齐方式,那些被遗忘的实用功能
  7. F - 上升子序列-超详细注释版
  8. php 的cookie设置时间,php cookie时间设置的方法
  9. 8 传输层----TCP
  10. asp教程一:创建 Active Server Page 页
  11. java调用nlpir_ZH奶酪:Java调用NLPIR汉语分词系统
  12. Redis写副本内存不够
  13. Python实现简单拼音输入法
  14. 寂寞沙洲冷c语言程序,周传雄《寂寞沙洲冷》吉他谱简单版 酷音小伟吉他弹唱教学吉他谱...
  15. 一年级上册计算机教学计划,一年级信息技术上册教学计划一年级信息技术教学计划...
  16. 裁员潮下,你需要这 10 大神器
  17. Linux下的酷我音乐盒(开源非官方)
  18. 不小心把苹果手机备忘录删掉怎么恢复
  19. UltraISO Premium Edition9.7.1.3519完美破解版
  20. ajax实验,AJAX实验报告.doc

热门文章

  1. 双十一来了,揭秘菜鸟物流背后的那些算法黑科技
  2. 微型计算机名词术语,微型计算机及接口技名词解释题及解答题.doc
  3. java instanceof运算符_Java instanceof 运算符的使用方法
  4. jq动态获取input的值传给html,jquery 保证html()拿到的html字符串包含input的value值
  5. java虚拟机工作原理图_Java虚拟机工作原理
  6. .net html5页面缓存,详解HTML5中的manifest缓存使用
  7. kuayu react_React+Spring实现跨域问题的完美解决方法
  8. 存储过程mysql报错1271_mysqldump备份失败以及解决方法汇总
  9. c++ eos智能合约开发_[EOS智能合约]第二节:用EOS开发一个To-do List小应用
  10. 三菱plc选型手册_模拟量是什么?PLC和模拟量是如何转换的?