题目链接:https://loj.ac/problem/6277

学习博客:http://hzwer.com/8053.html

#6277. 数列分块入门 1

内存限制:256 MiB时间限制:100 ms标准输入输出
题目类型:传统评测方式:文本比较
上传者: hzwer

提交提交记录统计测试数据讨论

2

题目描述

给出一个长为 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相关推荐

  1. LOJ——#6277. 数列分块入门 1

    ~~推荐播客~~ 「分块」数列分块入门1 – 9 by hzwer 浅谈基础根号算法--分块 博主蒟蒻,有缘人可直接观摩以上大佬的博客... #6277. 数列分块入门 1 题目大意: 给出一个长为 ...

  2. 1 数列分块入门_LOJ#6277.数列分块入门1

    内存限制:256 MiB时间限制:100 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者:hzwer 1 题目描述 给出一个长为nnn的数列,以及nnn个操作,操作涉及区间加法,单点查值. ...

  3. 【分块】#6277. 数列分块入门 1(区间修改、单点查询)

    整理的算法模板合集: ACM模板 题目传送门 题解by hzwer 区间修改实际上就分情况暴力枚举修改即可.单点查询直接输出,因为我们就是直接维护的一个数组. #pragma GCC optimize ...

  4. 数列分块入门 (1 ~ 7)

    分块 6277. 数列分块入门 1 分块思想 我们把每m个元素分成一块,所以我们总共的块数就是n/mn / mn/m块,一般情况下我们取m=nm = \sqrt{n}m=n​.对于区间加操作,我们可以 ...

  5. 「分块」数列分块入门1 – 9

    ACM模板 放暑假了,回归!!! 自己不会写暴力,而且好久没写代码了,于是学学分块的优雅暴力~ 「分块入门-LibreOJ」 「分块」数列分块入门1 – 9 by hzwer 数列简单分块问题实际上有 ...

  6. 【分块入门】LOJ 数列分块入门 1 - 9 (学习更新……)

    dl题解 _「分块」数列分块入门1 – 9 by hzwer LOJ #6277. 数列分块入门 1 题意:给出一个长为n的数列,以及n个操作,操作涉及区间加法,单点查值. 时间限制:100ms 分块 ...

  7. #6279. 数列分块入门 3(区间修改,查询权值前驱)

    #6279. 数列分块入门 3 这是使用hzwer建议的set写的分块代码,set自动排序,支持二分查找,但是常数较大,比我下面写的用vector实现的分块慢了三倍,空间大了10倍. #include ...

  8. LOJ 数列分块入门6

    LOJ 数列分块入门6 题目: 题目 题解: 我都不懂这题为什么要用分块... ... 直接vector就好了... 但是如果有区间修改的话就不行了.所以这题是启示我们也可以动态分块.具体就是每次插入 ...

  9. LOJ #6280. 数列分块入门 4-分块(区间加法、区间求和)

    #6280. 数列分块入门 4 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 题目描述 给出一个长为 ...

最新文章

  1. 扩展LLVM:添加指令、内部函数、类型等
  2. iOS 关于pods-frameworks.sh:permission denied报错的解决
  3. 回应关于《BCH五月硬分叉是伪需求》的疑问
  4. 多核服务器的JVM优化选项(转载)
  5. 如何区分Android wrap_content和fill_parent的详细说明
  6. 【thymeleaf】【SpringBoot】Thymeleaf 获取.properties中的配置项变量
  7. ASP.NET Core MVC with EF Core-迁移
  8. 如何检测本计算机耗电量,如何查看电脑耗电量?鲁大师查看电脑使用功率的方法...
  9. 软件开发,维护与支持的困惑
  10. python数据库模糊查询_python中的mysql数据库like模糊查询
  11. android 4.4 hifi,Android系统HiFi手机需要解决什么问题?_音频新闻-中关村在线
  12. 资讯美国悬赏1000万美元追捕勒索黑客、能源行业成为网络钓鱼攻击“重灾区”|11月8日全球网络安全热点
  13. 【线性代数】范德蒙行列式
  14. MAC全局安装yarn
  15. 创新电影院意在传播中华民族优秀传统文化
  16. SVN检出报错,SVN更新时忽略指定文件或文件夹
  17. 滤波算法 | 无迹卡尔曼滤波(UKF)算法及其MATLAB实现
  18. 按照物种丰度对OTU表格进行拆分-丰富和稀有物种识别
  19. 在Ubuntu16.04.1上安装、配置、使用Nginx
  20. linux设置NLS_LANG

热门文章

  1. 如何从源码包安装软件?
  2. 【方案分享】2021快手品牌号专项营销方案.pdf(附下载链接)
  3. 【干货】智能汽车行业“十年十大预测”.pdf(附下载链接)
  4. Motion and Optical Flow
  5. PyTorch系列入门到精通——BN、LN、IN and GN
  6. 检索召回 技术综述!
  7. linux shell tr,shell脚本 之 tee tr
  8. java string hash变量_java基础(六)-----String性质深入解析
  9. python异步高并发_python高并发异步服务器核心库forkcore使用方法
  10. mysql 主从 锁库_mysql 5.7.21 主从集群恢复GTID方式(不锁库)