专栏文章
题解:P13976 数列分块入门 1
P13976题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @minz7pja
- 此快照首次捕获于
- 2025/12/02 10:46 3 个月前
- 此快照最后确认于
- 2025/12/02 10:46 3 个月前
本题为线段树模版题。
写线段树太过繁琐,这里用树状数组实现。
注意,因为 的范围高达 ,所以要开long long。
AC Code:
CPP#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=3e5+5;
int n;
ll a[maxn],tree[maxn];
int lowbit(int x){
return x&-x;
}
void add(int p,ll v){
for(;p<=n;p+=lowbit(p)) tree[p]+=v;
}
void add_range(int l,int r,ll x){
add(l,x);
if(r+1<=n) add(r+1,-x);
}
ll query(int p){
ll res=0;
for(;p;p-=lowbit(p)) res+=tree[p];
return res;
}
int main(){
scanf("%d",&n);
a[0]=0;
for(int i=1;i<=n;++i){
scanf("%lld",&a[i]);
add(i,a[i]-a[i-1]);
}
for(int i=1;i<=n;++i){
int op,l,r;
ll c;
scanf("%d%d%d%lld",&op,&l,&r,&c);
if(op==0) add_range(l,r,c);
else cout<<query(r)<<'\n';
}
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...