标签:rt data 线段 tree mid long P3372 ll 模板
P3372 【模板】线段树 1
#include<bits/stdc++.h> using namespace std; typedef long long ll; const ll N=1e5+10; ll a[N]; struct Node{ ll it; ll l; ll r; ll data; }tree[N<<2]; ll n,m; void build(ll rt,ll l,ll r){ tree[rt].l = l; tree[rt].r = r; tree[rt].it = 0; if(l == r) { tree[rt].data = a[l]; return ; } ll mid = (l + r)>>1; build(rt*2,l,mid); build(rt*2+1,mid+1,r); tree[rt].data = tree[rt*2].data+tree[rt*2+1].data; return ; } void push_down(ll rt){ if(tree[rt].it!=0){ tree[rt*2].it+=tree[rt].it; tree[rt*2+1].it+=tree[rt].it; ll mid = (tree[rt].l+tree[rt].r)>>1; tree[rt*2].data+=tree[rt].it*(mid-tree[rt*2].l+1); tree[rt*2+1].data+=tree[rt].it*(tree[rt*2+1].r-mid); tree[rt].it=0; } return ; } void up_data(ll rt,ll l,ll r,ll k){ if(tree[rt].l>=l&&tree[rt].r<=r){ tree[rt].data+=k*(tree[rt].r-tree[rt].l+1); tree[rt].it+=k; return ; } push_down(rt); if(tree[rt*2].r>=l){ up_data(rt*2,l,r,k); } if(tree[rt*2+1].l<=r){ up_data(rt*2+1,l,r,k); } tree[rt].data = tree[rt*2].data + tree[rt*2+1].data; return ; } ll search(ll rt,ll l,ll r){ if(tree[rt].l>=l&&tree[rt].r<=r){ return tree[rt].data; } push_down(rt); ll num=0; if(tree[rt*2].r>=l){ num+=search(rt*2,l,r); } if(tree[rt*2+1].l<=r){ num+=search(rt*2+1,l,r); } return num; } int main(){ scanf("%lld%lld",&n,&m); for(ll i=1;i<=n;i++){ scanf("%lld",&a[i]); } build(1,1,n); for(ll i = 1;i <= m;i++){ ll go; scanf("%lld",&go); if(go == 1){ ll x,y,k; scanf("%lld%lld%lld",&x,&y,&k); up_data(1,x,y,k); } if(go == 2){ ll x,y; scanf("%lld%lld",&x,&y); printf("%lld\n",search(1,x,y)); } } return 0; }
标签:rt,data,线段,tree,mid,long,P3372,ll,模板 来源: https://www.cnblogs.com/LightyaChoo/p/13204727.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。