Luogu P3372 【模板】线段树 1
2024-10-14 14:31:34
#include<cstdio>
using namespace std;
const int maxn = ;
int n,m,x,y,flag;
int l[*maxn],r[*maxn];
long long lazy[*maxn],sum[*maxn]; void build(int L,int R,int now) {
lazy[now] = ;
l[now] = L;
r[now] = R;
if(L == R) {
scanf("%lld",&sum[now]);
return;
}
int mid = (L+R)/;
build(L,mid,now*);
build(mid+,R,now*+);
sum[now] = sum[now*] + sum[now*+];
} long long query(int L,int R,int now) {
sum[now] += lazy[now] * (r[now] - l[now] + );
lazy[now*] += lazy[now];
lazy[now*+] += lazy[now];
lazy[now] = ;
if(l[now] == L && r[now] == R)return sum[now];
int mid = (l[now]+r[now])/;
if(R <= mid) return query(L,R,now*);
else if(L >= mid+) return query(L,R,now*+);
else return query(L,mid,now*)+query(mid+,R,now*+);
} void modify(int L,int R,long long d,int now){
if(l[now] == L && r[now] == R) {
lazy[now] += d;
return;
}
sum[now] += (long long)d*(R-L+);
int mid = (l[now]+r[now])/;
if(R <= mid) modify(L,R,d,now*);
else if(L >= mid+) modify(L,R,d,now*+);
else {
modify(L,mid,d,now*);
modify(mid+,R,d,now*+);
}
} int main() {
scanf("%d%d",&n,&m);
build(,n,);
while(m) {
m--;
scanf("%d",&flag);
if(flag == ) {
long long k;
scanf("%d%d%lld",&x,&y,&k);
modify(x,y,k,);
}
if(flag == ) {
scanf("%d%d",&x,&y);
printf("%lld\n",query(x,y,));
}
}
return ;
}
最新文章
- Retina时代的前端视觉优化
- git基本使用方法
- 自己写的中间层..基于通讯组件 RTC
- LeetCode(9) - Palindrome Number
- sql常识-INNER JOIN
- div中加入iframe,可以实现Ajax的功能
- 使用css3背景渐变中的透明度来设置不同颜色的背景渐变
- 使用phpExcel导入Excel进入Mysql数据库
- PL/SQL Developer下设置“长SQL自己主动换行”
- bitmap 加载的时候出现OOM,nullpointer
- java快速排序详解
- python3 第十六章 - 函数
- bzoj5104: Fib数列
- Individual Reading Assignment
- windows下 navicat_premium破解方法
- APP注册邀请码
- matlab .fig转化成pdf 缺失
- SVN版本库备份和恢复
- Java微笔记(8)
- JS操作CSS随机改变网页背景