蓝桥杯学习记录||1264. 动态求连续区间和 | 线段树
AcWing||1264. 动态求连续区间和
活动地址:https://www.acwing.com/activity/content/19/
考察要点:线段树
题目要求
给定 n 个数组成的一个数列,规定有两种操作,一是修改某个元素,二是求子数列 [a,b] 的连续和。
输入格式
第一行包含两个整数 n 和 m,分别表示数的个数和操作次数。
第二行包含 n 个整数,表示完整数列。
接下来 m 行,每行包含三个整数 k,a,b (k=0,表示求子数列[a,b]的和;k=1,表示第 a 个数加 b)。
数列从 1 开始计数。
输出格式
输出若干行数字,表示 k=0 时,对应的子数列 [a,b] 的连续和。
数据范围
1≤n≤100000,
1≤m≤100000,
1≤a≤b≤n
输入样例:
10 5
1 2 3 4 5 6 7 8 9 10
1 1 5
0 1 3
0 4 8
1 7 5
0 4 8
输出样例:
11
30
35
题目地址:https://www.acwing.com/problem/content/1266/
解析:
按照y总说的数状数组是M4A1比较的精准但是条件要求比较严苛,恶劣环境下比较容易失灵,但是AK47(线段数)比较粗糙,但是伤害的,很多环境都可以稳定使用。
下图bulid的过程![](/assets/blank.gif)
//线段树
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;const int N =100010;
int n, m;
int w[N];struct Node
{int l, r;int sum;
}tr[4 * N];void pushup(int u)
{tr[u].sum = tr[u << 1].sum + tr[u <<1 | 1].sum;
}void build(int u, int l, int r)
{if(l == r) tr[u] = {l, r , w[r]}; //只有一个点,本身为最大值else{tr[u] = {l, r}; //有其他点tr[u].l = l tr[u].r = r tr[u].sum = 0 //sum 后面pushup会求出int mid = l + r >> 1; //求中点分叉build(u << 1, l, mid), build(u << 1 | 1, mid + 1, r);pushup(u);}
}int query(int u, int l, int r)//求和
{if(tr[u].l >= l && tr[u].r <= r) return tr[u].sum; //该节点完全包含着直接加入int mid = tr[u].l + tr[u].r >> 1; int sum = 0;if(l <= mid) sum = query(u << 1, l, r); //左边有值 一开始为零 可以直接等于?if(r > mid) sum += query(u << 1 |1, l, r);//右边有值 继续加上return sum;
}void modify(int u, int x, int v) //从根开始找到有这个数的加上v
{if(tr[u].l == tr[u].r) tr[u].sum += v;else{int mid = tr[u].l + tr[u].r >> 1;if(x <= mid) modify(u << 1, x, v);else modify(u << 1 | 1, x ,v);pushup(u);}
}int main()
{scanf("%d%d", &n , &m);for (int i = 1; i <= n; i ++ ) scanf("%d", &w[i]);build(1, 1, n); //构建线段数int k, a, b;while (m -- ){scanf("%d%d%d", &k,&a,&b);if(k == 0) printf("%d\n", query(1, a, b));else modify(1, a, b);}return 0;
}
本题:1264. 动态求连续区间和
代码参考:视频讲解
蓝桥杯学习记录||1264. 动态求连续区间和 | 线段树相关推荐
- 蓝桥杯学习记录-基础练习
注:每天都更新哦~,题目下面的代码都是经过测试正确的,欢迎有更好算法的大神指正,我会把您的代码也附上,相互学习. 蓝桥杯-基础练习:所有题 十六进制转八进制 进制转换 字符 循环 十六进制转十进制 进 ...
- 1264. 动态求连续区间和
给定 n 个数组成的一个数列,规定有两种操作,一是修改某个元素,二是求子数列 [a,b] 的连续和. 输入格式 第一行包含两个整数 n 和 m,分别表示数的个数和操作次数. 第二行包含 n 个整数,表 ...
- 【ACWing】1264. 动态求连续区间和
题目地址: https://www.acwing.com/problem/content/description/1266/ 给定 n n n个数组成的一个数列,规定有两种操作,一是修改某个元素,二是 ...
- 【蓝桥杯学习记录】【6】不定方程的解法
一次不定方程 4 * x - 5 * y = 7; ax + by = c; a = 4 , b = -5 , c = 7; ax = c - by; 1 .先求一个特殊解 ...
- 蓝桥杯学习记录||ALGO-1004 无聊的逗
无聊的逗 问题描述 逗志芃在干了很多事情后终于闲下来了,然后就陷入了深深的无聊中.不过他想到了一个游戏来使他更无聊.他拿出n个木棍,然后选出其中一些粘成一根长的,然后再选一些粘成另一个长的,他想知道在 ...
- 【蓝桥杯学习笔记】9. 解立方根——二分法+牛顿迭代法
系列文章目录 [蓝桥杯学习笔记]1. 入门基本语法及练习题 [蓝桥杯学习笔记]2. 常用模型----最大公约数和最小公倍数 [蓝桥杯学习笔记]3. 质数判断 [蓝桥杯学习笔记]5. 矩阵乘法 [蓝桥杯 ...
- 2022蓝桥杯学习——6.双指针、BFS和图论
一.双指针 关于双指针 核心思想就是优化!! 双指针只用一层循环,虽然里面是while,但j只执行了n次,所以ij一共就是2n,时间复杂度就是O(n) , 这种题一般先写出暴力算法,然后看单调性,如果 ...
- 蓝桥杯学习笔记--工厂灯光控制系统(小蜜蜂笔记作业)
文章目录 前言 一.功能要求 1.功能图 二.硬件分析 1.功能一硬件电路: 2.功能二硬件电路: 3.功能三硬件电路: 4.功能四硬件电路: 三.代码 1.整体流程(主函数) 2.138选择函数与关 ...
- 2022蓝桥杯学习——4.枚举、模拟与排序
一.枚举 蓝桥杯真题 1.连号区间 题目描述 小明这些天一直在思考这样一个奇怪而有趣的问题: 在 1∼N 的某个排列中有多少个连号区间呢? 这里所说的连号区间的定义是: 如果区间 [L,R] 里的所有 ...
最新文章
- 14 图的基础知识-几种常用的存储结构
- Windows 7防火墙设置详解(三)
- c++工程师面试常见问题之c++中四种cast转换
- 解决 Windows Update 时提示当前无法检查更新,因为未运行服务
- Eclipse之ANT使用
- LeetCode 1055. 形成字符串的最短路径(贪心)
- Mysql,Zookeeper,Redis,Mongodb压力测试结果
- Python基础:常用知识点汇总
- 360 n6 linux内核版本,五年26个版本:Linux系统内核全程回顾
- 计算机信息机房,计算机信息中心机房建设标准
- 响应服务器589,示例HTTP范围请求会话
- Python3.x:pytesseract识别率提高(样本训练)
- java nextDouble exception_java 控制台输入输出 nextdouble问题
- [升级失效]超星学术视频下载分析
- Total Variation
- 冰冻三尺,非一日之寒。数据解析——bs4
- 红米1A显示器于笔记本win10环境下,如何设置颜色范围使得显示器亮度恢复成250nit
- 1 is not JSON serializable的解决方案
- 带宽与速度的换算(表达式+例子)
- java压缩mp4大小_压缩的mp4视频播放时间太长(exoplayer)
热门文章
- eel+html 2 exe
- word修改后没保存/打开了自动保存没有恢复
- 计算机中各进制之间的转换
- 【论文-笔记】软件化雷达显示终端的设计与实现
- 【Latex 格式】Markdown或者LaTeX在单个字母上加一横、一点、两点、三角
- 猎聘和BOSS直聘谁会成为在线招聘的最后赢家?
- 学习Python单利模式
- #NAME?_#NAME?
- 解决mount.nfs: /home/xxxx/mpi-install is busy or already mounted问题
- Universal Robot——在Gazebo中模拟UR5机器人