整理的算法模板合集: 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(区间修改、单点查询)相关推荐

  1. 树状数组之区间修改单点查询

    树状数组的区间修改单点查询 树状数组其实本质还单点修改区间查询,但是我们怎么延伸到这个呢,我们建立一个差分数组, 比如:                a[10]={4, 6, 7, 5, 1, 6, ...

  2. 1631 小鲨鱼在51nod小学(线段树区间修改+单点查询:不用下传lazy的区间修改)

    题目描述: 1631 小鲨鱼在51nod小学 鲨鱼巨巨2.0(以下简称小鲨鱼)以优异的成绩考入了51nod小学.并依靠算法方面的特长,在班里担任了许多职务. 每一个职务都有一个起始时间A和结束时间B, ...

  3. leetcode:218. 天际线问题【区间修改 + 单点查询 + 找最大值板子 + 线段树】

    分析 用哈希+set压缩一下 最终只考虑楼的不重复端点即可 最后返回每个端点处的最大值 ac code from functools import reduceclass SegTree:'''通用线 ...

  4. P3368 【模板】树状数组 2(区间修改单点查询)

    这是树状数组的基础操作,和差分结合在一起,其实这种操作我更习惯于线段树的写法.不过树状数组代码短,执行效率高,值得记录一下. #include<bits/stdc++.h> #define ...

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

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

  6. 树状数组的建树 单点修改 单点查询 区间修改 区间查询

    单点修改  单点查询   用普通数组就能写出来 单点修改  区间查询   用线段树  树状数组: 区间修改  区间查询   用线段树  树状数组: 区间修改  单点查询   用线段树  树状数组: 建 ...

  7. 树状数组相关应用之区间更新单点查询问题

    区间更新单点查询 树状数组的基本应用是单点更新,区间查询(例如求区间和). 鉴于树状数组的空间复杂度和时间复杂度都比线段树小 而且代码也短 所以就有大神用强大的脑洞YY出了区间修改+单点查询的树状数组 ...

  8. #6277. 数列分块入门 1

    题目链接:https://loj.ac/problem/6277 学习博客:http://hzwer.com/8053.html #6277. 数列分块入门 1 内存限制:256 MiB时间限制:10 ...

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

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

  10. HDU 3966 Aragorn's Story (树链点权剖分,成段修改单点查询)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3966 树链剖分的模版,成段更新单点查询.熟悉线段树的成段更新的话就小case啦. 1 //树链剖分 边 ...

最新文章

  1. TIOBE 5 月编程语言排行榜:Python、C++竞争白热化,Objective-C已沦为小众语言
  2. 5、Scala模式匹配
  3. android 弹出一个在桌面上出现的window
  4. 安装Zabbix过程中出现的问题集
  5. 一个墙纸还可以改变使用裁剪工具改变图像
  6. 【报错笔记】pom.xml第一行报错,显示红色叉号
  7. 跨域获取后台数据undefined_同源策略amp;JSONP跨域
  8. 卸载利器IObit Uninstaller Portable v9.4.0.20绿化版
  9. PHP curl 参数详解
  10. Tab Space:超棒的Safari浏览器标签快速保存工具
  11. 2022年华为杯中国研究生数学建模竞赛C题思路
  12. WebService接口开发和调用
  13. C# 控制台应用程序
  14. java解压zip和rar并解决乱码问题
  15. 常见的图像分割方法有以下几种
  16. oracle如何按时间索引降序,Oracle 降序索引
  17. 双线macd指标参数最佳设置_MT4双线MACD设置方法及扩展应用
  18. HIT CS:APP 计算机系统大作业 《程序人生-Hello’s P2P》
  19. 机械硬盘的工作原理详细解析,以及机械硬盘和固态硬盘的优缺点对比
  20. 最近看的电影综艺推荐

热门文章

  1. Python+OpenCV实现自动扫雷,创造属于自己的世界记录!
  2. 用于半监督语义分割的基于掩码的数据增强
  3. OpenCV使用CUDA处理图像的教程与实战
  4. 基于Python进行相机校准
  5. 编写你人生中第一个机器学习代码吧!
  6. 更改VMWare 虚拟机的硬件设置
  7. vue vue-router vuex element-ui axios 的学习笔记(七)完善登录注册
  8. gitlab+jenkins+maven+docker持续集成(四)——Extended E-mail Notification配置
  9. 46、我的C#学习笔记12
  10. 玩转 iOS 开发:《iOS 设计模式 — 工厂模式》