当前位置: 首页 > java >正文

信息学奥赛一本通 1547:【 例 1】区间和

【题目链接】

ybt 1547:【 例 1】区间和

【题目考点】

1. 线段树
2. 树状数组

【解题思路】

本题要求维护区间和,实现单点修改、区间查询。

解法1:线段树

线段树原理,及实现方法见:洛谷 P3374 【模板】树状数组 1(线段树解法)

解法2:树状数组

本题也可以使用树状数组完成,知识点及实现方法见:洛谷 P3374 【模板】树状数组 1(树状数组解法)。

由于都是模板题,大同小异,本文不再进行详细解释。

【题解代码】

解法1:线段树

#include<bits/stdc++.h>
using namespace std;
#define N 100005
struct Node
{int l, r, m;long long val;
} tree[4*N];
int n, m;
void pushUp(int i)
{tree[i].val = tree[2*i].val+tree[2*i+1].val;
}
void build(int i, int l, int r)
{tree[i].l = l, tree[i].r = r, tree[i].m = (l+r)/2;if(l == r){tree[i].val = 0;return;}build(2*i, l, tree[i].m);build(2*i+1, tree[i].m+1, r);pushUp(i);
}
void update(int i, int x, int v)//a[x] += v
{if(tree[i].l == tree[i].r){tree[i].val += v;return;}if(x <= tree[i].m)update(2*i, x, v);elseupdate(2*i+1, x, v);pushUp(i);
} 
long long query(int i, int l, int r)
{if(l <= tree[i].l && tree[i].r <= r)return tree[i].val;long long s = 0;if(l <= tree[i].m)s += query(2*i, l, r);if(r > tree[i].m)s += query(2*i+1, l, r);return s;
}
int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);int k, x, y;cin >> n >> m;build(1, 1, n);while(m--){cin >> k >> x >> y;if(k == 0)update(1, x, y);elsecout << query(1, x, y) << '\n';}return 0;
}

解法2:树状数组

#include <bits/stdc++.h>
using namespace std;
#define N 100005
long long tree[N], n, m;//tree:树状数组 
int lowbit(int x)
{return x & -x;
}
void update(int i, long long v)//a[i] += v 单点修改 
{for(int x = i; x <= n; x += lowbit(x))tree[x] += v;
}
long long sum(int i)//求a[1]+...+a[i] 区间查询 
{long long s = 0;for(int x = i; x > 0; x -= lowbit(x))s += tree[x];return s;
}
long long query(int l, int r)//求a序列区间和[l, r] 
{return sum(r)-sum(l-1);
}
int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);long long a, k, b;cin >> n >> m;for(int i = 1; i <= m; ++i){cin >> k >> a >> b;if(k == 0)update(a, b);elsecout << query(a, b) << '\n';	}return 0;
}
http://www.xdnf.cn/news/9132.html

相关文章:

  • 算法-全排列
  • 怎么预测体育比赛的胜率?
  • 曲线匹配,让数据点在匹配数据的一侧?
  • 第12次06 :用户中心添加邮箱
  • 【01】大模型原理与API使用
  • 【本地面板公网访问】本地面板也能公网访问?CasaOS+1Panel+cpolar保姆级教程
  • GeoServer样式设置:使用本地图标及分层/分视野显示
  • linux中使用make clean重新编译
  • 3dmax直接导入导出gltf/glb格式插件(免费)
  • 链表面试题10之随机链表的复制
  • Windows环境下Redis的安装使用与报错解决
  • DeepSpeed-Ulysses:支持极长序列 Transformer 模型训练的系统优化方法
  • 技术视界 | 打造“有脑有身”的机器人:ABC大脑架构深度解析(上)
  • Redisson使用分布锁的详解
  • LTC之管理线索:企业抢占市场先机的制胜法宝
  • 第7章 C控制语句:分支和跳转
  • AI赋能天气预测:微软 Aurora 模型
  • 工业视觉阈值技术圣经:VisionMaster六维算法解析+脑图攻防手册
  • Selenium 测试框架 - .NET
  • 有铜半孔的设计规范与材料创新
  • 苍穹外卖--Redis
  • JavaScrip 中 reduce 函数用法详解
  • (请关注)Oracle性能调优、优化总结调优参考直接应用,性能提升实用案例
  • 时代变了,我选择ApiFox替代Postman
  • einops.layers.torch.Rearrange作用
  • 计算机网络实验课(一)——配置+实验一:查看当前主机所有的网卡信息
  • 2.1 C++之条件语句
  • 5.26打卡
  • RK3588 buildroot 双网口bonding调试
  • MERIT:用于可靠且可解释的肝纤维化分期的多视图证据学习|文献速递-深度学习医疗AI最新文献