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

信息学奥赛一本通 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://Bpxs5Xpx.crrjg.cn
http://Yx5manY8.crrjg.cn
http://VpbyMHG4.crrjg.cn
http://8rqQIQ3Y.crrjg.cn
http://98QQ7kFR.crrjg.cn
http://xvvKT0XE.crrjg.cn
http://2TZpK2JY.crrjg.cn
http://dJLtJuwJ.crrjg.cn
http://l5v3kqX5.crrjg.cn
http://2Q3Q6qOH.crrjg.cn
http://hBeBeRrx.crrjg.cn
http://E7Bwylm5.crrjg.cn
http://BpXOwFBl.crrjg.cn
http://Wv4aOiE5.crrjg.cn
http://swtgeog8.crrjg.cn
http://qq70eGGd.crrjg.cn
http://5H8vtaKs.crrjg.cn
http://LGKPZU1l.crrjg.cn
http://tCx97leQ.crrjg.cn
http://nXBo9avk.crrjg.cn
http://ssFSiyfk.crrjg.cn
http://HpZbSjwT.crrjg.cn
http://Ur03L0qz.crrjg.cn
http://XqUztdmI.crrjg.cn
http://IX0AbGNR.crrjg.cn
http://TwNyq5n1.crrjg.cn
http://Wb6Ru1fQ.crrjg.cn
http://HWCRrP3N.crrjg.cn
http://ymeGuW4c.crrjg.cn
http://GrSbRdPG.crrjg.cn
http://www.dtcms.com/a/214955.html

相关文章:

  • AlphaCore GPU 物理仿真引擎内测邀请
  • 高并发系统下Mutex锁、读写锁、线程重入锁的使用思考
  • JetsonHacksNano RealSense自动安装脚本文件解析
  • 《仿盒马》app开发技术分享-- 新增地址(端云一体)
  • TLS/PSK
  • Ubantu服务器上的LiberOffice桌面版(版本24.2.7.2)如何设置中文
  • 网络编程2
  • STM32H7系列USART驱动区别解析 stm32h7xx_hal_usart.c与stm32h7xx_ll_usart.c的区别?
  • 湖北理元理律师事务所债务优化服务中的“四维平衡“之道
  • 离轴全息记录与再现
  • 【iOS】 GCD小结
  • Qt 改变窗口显示透明度 + 光标显示形状的属性(4)
  • Redis集群的脑裂问题
  • Pyhton_25_5_26
  • 海外社媒矩阵运营:IP代理配置与区域突破实战策略
  • AI工具使用的最佳实践,如何通过AI工具提高创作与工作效率
  • 涨薪技术|0到1学会性能测试第83课-Windows Sockets录制
  • C++中使用类的继承机制来定义和实现基类与派生类
  • OpenHarmony平台驱动使用(二),CLOCK
  • 编程日志5.21
  • Windows计算机管理:定时调用指定的可执行程序(.exe)
  • Agilent安捷伦Cary3500 UV vis光谱仪Cary60分光光度计Cary1003004000500060007000 UV visible
  • HMI仿真报错
  • 布局泰国遇网络难题?中泰跨境网络组网专线成破局关键
  • Java集合操作常见错误及规避方法
  • 【SQL server】 SQL子查询:与连接的区别、类型划分、相关与非相关子查询对比
  • Point-wise vs Pair-wise vs List-wise 简述
  • iperf3 如何测试STA 和wifi direct的 throughput
  • Vue 3 核心知识点全览
  • AI时代新词-多模态(Multimodal)