当前位置: 首页 > 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;
}

相关文章:

  • 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
  • 经验分享的网站开发/腾讯效果推广
  • html5 css3网站实例设计报告/seo优化专家
  • 怎么用div做网站/超级优化大师下载
  • 网站空间 哪个公司好/搜索引擎营销的优缺点及案例
  • wordpress后台500错误/seo排名优化首页
  • 用ps怎么做网站导航条/网站排名查询站长之家