【分块】#6277. 数列分块入门 1(区间修改、单点查询)
整理的算法模板合集: ACM模板
题目传送门
题解by hzwer
区间修改实际上就分情况暴力枚举修改即可。单点查询直接输出,因为我们就是直接维护的一个数组。
#pragma GCC optimize("Ofast")
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<bitset>
#include<map>#define debug(x) cout << x << "ok" << endl
typedef long long ll;
#define file freopen("1.in", "r", stdin);freopen("1.out", "w", stdout);
const int N = 5e4 + 7, M = 1e5 + 7, INF = 0x3f3f3f3f;
const int B = 260, B2 = 300;using namespace std;ll read()
{ll x = 0, f = 1;char ch = getchar();while(ch < '0' || ch > '9'){if(ch == '-')f = -1;ch = getchar();}while(ch >= '0' && ch <= '9'){x = x * 10 + ch - '0';ch = getchar();}return x * f;
}int n, m, block;
int val[N];
int bi[N];//block_id
int atage[N];//l,r是实际的点的编号
void modify(int l, int r, int k)
{for(int i = l; i <= min(bi[l] * block, r); ++ i)val[i] += k;//update(bi[l]);//这里不需要块内有序if(bi[l] != bi[r]){//!注意这里是(bi[r] - 1),表示的是上一个 “块”而不是实际节点r for(int i = ((bi[r] - 1) * block + 1); i <= r; ++ i)val[i] += k;//update(bi[r]);}//块的编号for(int i = bi[l] + 1; i <= bi[r] - 1; ++ i)atage[i] += k;
}int main()
{n =read();block = sqrt(n);for(int i = 1; i <= n; ++ i)val[i] = read();for(int i = 1; i <= n; ++ i)bi[i] = (i - 1) / block + 1;//1~block是第一块,block + 1 ~ 2 * block是第二块for(int i = 1; i <= n; ++ i){int op = read(), a = read(), b = read(), c = read();if(op == 0)modify(a, b, c);if(op == 1)printf("%d\n", val[b] + atage[bi[b]]);}return 0;
}
【分块】#6277. 数列分块入门 1(区间修改、单点查询)相关推荐
- 树状数组之区间修改单点查询
树状数组的区间修改单点查询 树状数组其实本质还单点修改区间查询,但是我们怎么延伸到这个呢,我们建立一个差分数组, 比如: a[10]={4, 6, 7, 5, 1, 6, ...
- 1631 小鲨鱼在51nod小学(线段树区间修改+单点查询:不用下传lazy的区间修改)
题目描述: 1631 小鲨鱼在51nod小学 鲨鱼巨巨2.0(以下简称小鲨鱼)以优异的成绩考入了51nod小学.并依靠算法方面的特长,在班里担任了许多职务. 每一个职务都有一个起始时间A和结束时间B, ...
- leetcode:218. 天际线问题【区间修改 + 单点查询 + 找最大值板子 + 线段树】
分析 用哈希+set压缩一下 最终只考虑楼的不重复端点即可 最后返回每个端点处的最大值 ac code from functools import reduceclass SegTree:'''通用线 ...
- P3368 【模板】树状数组 2(区间修改单点查询)
这是树状数组的基础操作,和差分结合在一起,其实这种操作我更习惯于线段树的写法.不过树状数组代码短,执行效率高,值得记录一下. #include<bits/stdc++.h> #define ...
- LOJ——#6277. 数列分块入门 1
~~推荐播客~~ 「分块」数列分块入门1 – 9 by hzwer 浅谈基础根号算法--分块 博主蒟蒻,有缘人可直接观摩以上大佬的博客... #6277. 数列分块入门 1 题目大意: 给出一个长为 ...
- 树状数组的建树 单点修改 单点查询 区间修改 区间查询
单点修改 单点查询 用普通数组就能写出来 单点修改 区间查询 用线段树 树状数组: 区间修改 区间查询 用线段树 树状数组: 区间修改 单点查询 用线段树 树状数组: 建 ...
- 树状数组相关应用之区间更新单点查询问题
区间更新单点查询 树状数组的基本应用是单点更新,区间查询(例如求区间和). 鉴于树状数组的空间复杂度和时间复杂度都比线段树小 而且代码也短 所以就有大神用强大的脑洞YY出了区间修改+单点查询的树状数组 ...
- #6277. 数列分块入门 1
题目链接:https://loj.ac/problem/6277 学习博客:http://hzwer.com/8053.html #6277. 数列分块入门 1 内存限制:256 MiB时间限制:10 ...
- 「分块」数列分块入门1 – 9
ACM模板 放暑假了,回归!!! 自己不会写暴力,而且好久没写代码了,于是学学分块的优雅暴力~ 「分块入门-LibreOJ」 「分块」数列分块入门1 – 9 by hzwer 数列简单分块问题实际上有 ...
- HDU 3966 Aragorn's Story (树链点权剖分,成段修改单点查询)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3966 树链剖分的模版,成段更新单点查询.熟悉线段树的成段更新的话就小case啦. 1 //树链剖分 边 ...
最新文章
- TIOBE 5 月编程语言排行榜:Python、C++竞争白热化,Objective-C已沦为小众语言
- 5、Scala模式匹配
- android 弹出一个在桌面上出现的window
- 安装Zabbix过程中出现的问题集
- 一个墙纸还可以改变使用裁剪工具改变图像
- 【报错笔记】pom.xml第一行报错,显示红色叉号
- 跨域获取后台数据undefined_同源策略amp;JSONP跨域
- 卸载利器IObit Uninstaller Portable v9.4.0.20绿化版
- PHP curl 参数详解
- Tab Space:超棒的Safari浏览器标签快速保存工具
- 2022年华为杯中国研究生数学建模竞赛C题思路
- WebService接口开发和调用
- C# 控制台应用程序
- java解压zip和rar并解决乱码问题
- 常见的图像分割方法有以下几种
- oracle如何按时间索引降序,Oracle 降序索引
- 双线macd指标参数最佳设置_MT4双线MACD设置方法及扩展应用
- HIT CS:APP 计算机系统大作业 《程序人生-Hello’s P2P》
- 机械硬盘的工作原理详细解析,以及机械硬盘和固态硬盘的优缺点对比
- 最近看的电影综艺推荐
热门文章
- Python+OpenCV实现自动扫雷,创造属于自己的世界记录!
- 用于半监督语义分割的基于掩码的数据增强
- OpenCV使用CUDA处理图像的教程与实战
- 基于Python进行相机校准
- 编写你人生中第一个机器学习代码吧!
- 更改VMWare 虚拟机的硬件设置
- vue vue-router vuex element-ui axios 的学习笔记(七)完善登录注册
- gitlab+jenkins+maven+docker持续集成(四)——Extended E-mail Notification配置
- 46、我的C#学习笔记12
- 玩转 iOS 开发:《iOS 设计模式 — 工厂模式》