数列分块入门 1(LibreOj-6277)
【题目描述】
给出一个长为 n 的数列,以及 n 个操作,操作涉及区间加法,单点查值。
【输入格式】
第一行输入一个数字 n。
第二行输入 n 个数字,第 i 个数字为 ai,以空格隔开。
接下来输入 n 行询问,每行输入四个数字 opt、l、r、c,以空格隔开。
若 opt=0,表示将位于 [l,r] 的之间的数字都加 c。
若 opt=1,表示询问 a[r] 的值(l 和 c 忽略)。
【输出格式】
对于每次询问,输出一行一个数字表示答案。
【样例】
样例输入
4
1 2 2 3
0 1 3 1
1 0 1 0
0 1 2 2
1 0 2 0样例输出
2
5【数据范围与提示】
对于 100% 的数据,1<=n<=50000,-2^31<=other,ans<=2^31-1。
【源代码】
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
#include<bitset>
#define EPS 1e-9
#define PI acos(-1.0)
#define INF 0x3f3f3f3f
#define LL long long
const int MOD = 1E9+7;
const int N = 100000+5;
const int dx[] = {-1,1,0,0,-1,-1,1,1};
const int dy[] = {0,0,-1,1,-1,1,-1,1};
using namespace std;int block;//block为块的长度
int a[N];//存放数列元素
int pos[N],tag[N];//pos记录第i个元素在第几个块中,tag为操作标记
void add(int L,int R,int x){for(int i=L;i<=min(pos[L]*block,R);i++)//统计左区间a[i]+=x;if(pos[L]!=pos[R])//如果存在右区间才遍历,防止重复计算for(int i=(pos[R]-1)*block+1;i<=R;i++)//统计右区间a[i]+=x;for(int i=pos[L]+1;i<=pos[R]-1;i++)//统计整块区间tag[i]+=x;
}
int main(){int n;scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&a[i]);block=sqrt(n);//块的长度for(int i=1;i<=n;i++)//第i个元素在第几块中pos[i]=(i-1)/block+1;for(int i=1;i<=n;i++){int op;int left,right,x;scanf("%d",&op);scanf("%d%d%d",&left,&right,&x);if(op==0)add(left,right,x);elseprintf("%d\n",a[right]+tag[pos[right]]);}return 0;
}
数列分块入门 1(LibreOj-6277)相关推荐
- #6277. 数列分块入门 1
题目链接:https://loj.ac/problem/6277 学习博客:http://hzwer.com/8053.html #6277. 数列分块入门 1 内存限制:256 MiB时间限制:10 ...
- LOJ——#6277. 数列分块入门 1
~~推荐播客~~ 「分块」数列分块入门1 – 9 by hzwer 浅谈基础根号算法--分块 博主蒟蒻,有缘人可直接观摩以上大佬的博客... #6277. 数列分块入门 1 题目大意: 给出一个长为 ...
- 「分块」数列分块入门1 – 9
ACM模板 放暑假了,回归!!! 自己不会写暴力,而且好久没写代码了,于是学学分块的优雅暴力~ 「分块入门-LibreOJ」 「分块」数列分块入门1 – 9 by hzwer 数列简单分块问题实际上有 ...
- 数列分块入门 (1 ~ 7)
分块 6277. 数列分块入门 1 分块思想 我们把每m个元素分成一块,所以我们总共的块数就是n/mn / mn/m块,一般情况下我们取m=nm = \sqrt{n}m=n.对于区间加操作,我们可以 ...
- 【分块入门】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 提交提交记录统计测试数据讨论 题目描述 给出一个长为 ...
- 数列分块入门(套题)(loj6277,loj6278,loj6279,loj6280,loj6281,loj6282,loj6283,loj6284,loj6285)
前言 zjoi考差了,码一些分块题缓解一下心情 壹 数列分块入门 1[loj6277] 题目大意:区间加,单点查 直接分块,区间加时完全覆盖的块打tag,边界块暴力重构 块大小设为n\sqrt nn ...
- 「分块系列」数列分块入门3 解题报告
数列分块入门3 题意概括 区间加法,区间求前驱. 写在前面 这题的方法与分块2方法极其类似,建议自行解决. 正题 和上一题类似,但是二分不是用来计数的,而是用来求小于c的最大值的.然后对于不完整快,将 ...
最新文章
- 代码实战 | 用LeGO-LOAM实现BFS点云聚类和噪点剔除
- 语言堆栈入门——堆和栈的区别
- CSS基础(part19)--CSS3属性选择器
- 5菜鸟教程_excel图文教程:应用PQ工具进行数据整理
- java mac 转换 整形_JAVA的整型与字符串相互转换
- pythopn 函数(内置函数)
- 计算机考研需要看数据库吗,05报考华中科技计算机系数据库所的我复试经历
- 手机发包工具_【发包工具】http多线程发包工具
- .mmap文件用什么软件可以打开?
- python3.6 编程技巧总结
- adb冲突 傲软_手机投屏到电脑软件
- 女生学习前端究竟适不适合?
- 禁用电子邮件服务器,启用或禁用对邮箱中的邮箱的 POP3 或 IMAP4 Exchange Server
- SpringBoot日记本系统 :关键字搜索BUG(Mybatisplus and和or的问题)
- 中医证型关联规则挖掘Python代码【完整】
- 渗透测试工具实战技巧合集
- BAT批量将CR2文件转化为JPG
- 渗透测试工具之——启明天镜BS版本概述
- Laravel 5文档阅读摘要
- 一级缓存 与 二级缓存区别
热门文章
- SQL2005删除用户的时候,产生“数据库主体在该数据库中拥有架构,无法删除”的解决办法...
- Enterprise Library: Logging and Instrumentation Application Block概述
- 39个史诗级奇葩代码注释,程序不会崩,但程序员会
- 发年终奖了,送台MacBook Air!
- mybatis 学习之多数据源整合
- 我要带徒弟学写JAVA架构,引路架构师之路(Jeecg开源社区)
- JSF 源代码赏析之Lifecycle
- Java描述设计模式(09):装饰模式
- Essentials of Deep Learning: Visualizing Convolutional Neural Networks in Python
- Matlab实现CNN(二)