#6277. 数列分块入门 1
题目链接:https://loj.ac/problem/6277
学习博客:http://hzwer.com/8053.html
#6277. 数列分块入门 1
题目描述
给出一个长为 nn 的数列,以及 nn 个操作,操作涉及区间加法,单点查值。
输入格式
第一行输入一个数字 nn。
第二行输入 nn 个数字,第 ii 个数字为 a_iai,以空格隔开。
接下来输入 nn 行询问,每行输入四个数字 \mathrm{opt}opt、ll、rr、cc,以空格隔开。
若 \mathrm{opt} = 0opt=0,表示将位于 [l, r][l,r] 的之间的数字都加 cc。
若 \mathrm{opt} = 1opt=1,表示询问 a_rar 的值(ll 和 cc 忽略)。
输出格式
对于每次询问,输出一行一个数字表示答案。
样例
样例输入
4
1 2 2 3
0 1 3 1
1 0 1 0
0 1 2 2
1 0 2 0
样例输出
2
5
数据范围与提示
对于 100\%100% 的数据,1 \leq n \leq 50000, -2^{31} \leq \mathrm{others}1≤n≤50000,−231≤others、\mathrm{ans} \leq 2^{31}-1ans≤231−1。
思路:这题可以用很多种数据结构来写,这里就只用分块
看代码:
#include<iostream> #include<math.h> #include<stdlib.h> #include<stdio.h> #include<cmath> #include<algorithm> using namespace std; typedef long long ll; const int maxn=50000+5; int a[maxn]; int bl[maxn];//bl[i]代表第i个数位于哪个块 int atag[maxn];//存储一个一块全部加的值 int block;//块的大小 void add(int l,int r,int c) {for(int i=l;i<=min(bl[l]*block,r);i++) a[i]+=c;//最左边的一个整块if(bl[l]!=bl[r])//不在一个块时 {for(int i=(bl[r]-1)*block+1;i<=r;i++) a[i]+=c;//最右边的一个整块 }for(int i=bl[l]+1;i<=bl[r]-1;i++) atag[i]+=c;//中间的整块 } int main() {int n;int opt,l,r,c;scanf("%d",&n);block=sqrt(n);//每个块的大小for(int i=1;i<=n;i++) scanf("%d",&a[i]);//输入区间for(int i=1;i<=n;i++) bl[i]=(i-1)/block+1;//分块 //这里为什么是(i-1)/block+1呢 比如block=2 那么1 2 是属于第一个块的 3 4属于第二个块 这样处理刚好能满足需求for(int i=1;i<=n;i++){scanf("%d%d%d%d",&opt,&l,&r,&c);if(opt==0) add(l,r,c);else printf("%d\n",a[r]+atag[bl[r]]);}return 0; }
转载于:https://www.cnblogs.com/caijiaming/p/10304300.html
#6277. 数列分块入门 1相关推荐
- LOJ——#6277. 数列分块入门 1
~~推荐播客~~ 「分块」数列分块入门1 – 9 by hzwer 浅谈基础根号算法--分块 博主蒟蒻,有缘人可直接观摩以上大佬的博客... #6277. 数列分块入门 1 题目大意: 给出一个长为 ...
- 1 数列分块入门_LOJ#6277.数列分块入门1
内存限制:256 MiB时间限制:100 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者:hzwer 1 题目描述 给出一个长为nnn的数列,以及nnn个操作,操作涉及区间加法,单点查值. ...
- 【分块】#6277. 数列分块入门 1(区间修改、单点查询)
整理的算法模板合集: ACM模板 题目传送门 题解by hzwer 区间修改实际上就分情况暴力枚举修改即可.单点查询直接输出,因为我们就是直接维护的一个数组. #pragma GCC optimize ...
- 数列分块入门 (1 ~ 7)
分块 6277. 数列分块入门 1 分块思想 我们把每m个元素分成一块,所以我们总共的块数就是n/mn / mn/m块,一般情况下我们取m=nm = \sqrt{n}m=n.对于区间加操作,我们可以 ...
- 「分块」数列分块入门1 – 9
ACM模板 放暑假了,回归!!! 自己不会写暴力,而且好久没写代码了,于是学学分块的优雅暴力~ 「分块入门-LibreOJ」 「分块」数列分块入门1 – 9 by hzwer 数列简单分块问题实际上有 ...
- 【分块入门】LOJ 数列分块入门 1 - 9 (学习更新……)
dl题解 _「分块」数列分块入门1 – 9 by hzwer LOJ #6277. 数列分块入门 1 题意:给出一个长为n的数列,以及n个操作,操作涉及区间加法,单点查值. 时间限制:100ms 分块 ...
- #6279. 数列分块入门 3(区间修改,查询权值前驱)
#6279. 数列分块入门 3 这是使用hzwer建议的set写的分块代码,set自动排序,支持二分查找,但是常数较大,比我下面写的用vector实现的分块慢了三倍,空间大了10倍. #include ...
- LOJ 数列分块入门6
LOJ 数列分块入门6 题目: 题目 题解: 我都不懂这题为什么要用分块... ... 直接vector就好了... 但是如果有区间修改的话就不行了.所以这题是启示我们也可以动态分块.具体就是每次插入 ...
- LOJ #6280. 数列分块入门 4-分块(区间加法、区间求和)
#6280. 数列分块入门 4 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 题目描述 给出一个长为 ...
最新文章
- 扩展LLVM:添加指令、内部函数、类型等
- iOS 关于pods-frameworks.sh:permission denied报错的解决
- 回应关于《BCH五月硬分叉是伪需求》的疑问
- 多核服务器的JVM优化选项(转载)
- 如何区分Android wrap_content和fill_parent的详细说明
- 【thymeleaf】【SpringBoot】Thymeleaf 获取.properties中的配置项变量
- ASP.NET Core MVC with EF Core-迁移
- 如何检测本计算机耗电量,如何查看电脑耗电量?鲁大师查看电脑使用功率的方法...
- 软件开发,维护与支持的困惑
- python数据库模糊查询_python中的mysql数据库like模糊查询
- android 4.4 hifi,Android系统HiFi手机需要解决什么问题?_音频新闻-中关村在线
- 资讯美国悬赏1000万美元追捕勒索黑客、能源行业成为网络钓鱼攻击“重灾区”|11月8日全球网络安全热点
- 【线性代数】范德蒙行列式
- MAC全局安装yarn
- 创新电影院意在传播中华民族优秀传统文化
- SVN检出报错,SVN更新时忽略指定文件或文件夹
- 滤波算法 | 无迹卡尔曼滤波(UKF)算法及其MATLAB实现
- 按照物种丰度对OTU表格进行拆分-丰富和稀有物种识别
- 在Ubuntu16.04.1上安装、配置、使用Nginx
- linux设置NLS_LANG
热门文章
- 如何从源码包安装软件?
- 【方案分享】2021快手品牌号专项营销方案.pdf(附下载链接)
- 【干货】智能汽车行业“十年十大预测”.pdf(附下载链接)
- Motion and Optical Flow
- PyTorch系列入门到精通——BN、LN、IN and GN
- 检索召回 技术综述!
- linux shell tr,shell脚本 之 tee tr
- java string hash变量_java基础(六)-----String性质深入解析
- python异步高并发_python高并发异步服务器核心库forkcore使用方法
- mysql 主从 锁库_mysql 5.7.21 主从集群恢复GTID方式(不锁库)