#include<bits/stdc++.h>
using namespace std;
long long c[1000005],n,m;
long long lowbit(long long x){
return x&(-x);
}
long long sum(long long i){
long long s=0;
while(i>0){
s+=c[i];
i-=lowbit(i);
}
return s;
}
void add(long long i,long long val){
while(i<=n){
c[i]+=val;
i+=lowbit(i);
}
}
int main(){
long long k,a,b,x;
scanf("%lld%lld",&n,&m);
for(long long i=1;i<=n;i++){
scanf("%lld",&x);
add(i,x);
}
while(m--){
scanf("%lld%lld%lld",&k,&a,&b);
if(k==2){
printf("%lld\n",sum(b)-sum(a-1));
}
else{
add(a,b);
}
}
return 0;
}
1.「一本通4.1例1」树状数组1
2024-04-14 20:45:32 By syxx_huangshiran
数据结构过关考题目
2024-04-14 20:43:30 By syxx_huangshiran
数据结构过关考题目
仅供参考,毕竟小编也不知道老师换不换题
一、 1.「一本通4.1例1」树状数组1
二、12.「一本通4.3练习2」花神游历各国
三、14.「一本通4.2例1」数列区间最大值
四、20.「一本通4.4例1」点的距离
五、28.「一本通4.5例1」树的统计
六、31.「一本通4.5练习3」染色
七、45.「一本通4.6例1」营业额统计
八、52.「一本通5.5例1」滑动窗口
九、66.例5.6.4可持久化数组
十、列队
新博客
2024-03-19 20:28:42 By syxx_huangshiran
题目背景
大爷想上厕所,所以他决定找纸巾
题目描述
大爷精力为V,现有n个人,每个人占用精力为Vi,贡献纸巾可用次数为Wi,每个人要么至多给Mi次纸巾,要么数量无限,在所费精力不超过V的前提下所找到纸巾的可用次数最大值是多少?
输入格式
第1行,两个数N和V。下面N行,每行三个数Vi,Wi,Mi分别表示每个人的占用精力、贡献纸巾可用次数与数量, Mi>=1表示至多取Mi件,Mi=?1表示数量无限。
输出格式
一个数Ans,表示所找纸的可用次数最大值。
样例
样例输入
5 10 2 3 1 3 2 5 2 2 -1 4 2 1 2 4 2
样例输出
15
数据规模与约定
$N \le 30,V \le 200,Mi \le 10$
共 13 篇博客