欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > 信息学奥赛一本通 1535:【例 1】数列操作

信息学奥赛一本通 1535:【例 1】数列操作

2025/5/14 8:12:41 来源:https://blog.csdn.net/lq1990717/article/details/147936740  浏览:    关键词:信息学奥赛一本通 1535:【例 1】数列操作

【题目链接】

ybt 1535:【例 1】数列操作

【题目考点】

1. 树状数组

【解题思路】

本题为树状数组模板题,维护区间和,进行单点修改,区间查询。
详细讲解见:洛谷 P3374 【模板】树状数组 1(树状数组解法)

【题解代码】

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词