codevs 1082 线段树练习3
来源:互联网 发布:淘宝夜鹰 编辑:程序博客网 时间:2024/06/05 20:53
#include<iostream>#include<cstdio>#include<cmath>using namespace std;int n,q;long long sum,a[200001];struct tr{int l,r;long long v,ad;}s[2000001];void build(int i,int l,int r){s[i].l=l;s[i].r=r;if(l==r){s[i].v=a[l];return;}build(i*2,l,(l+r)/2);build(i*2+1,(l+r)/2+1,r);s[i].v=s[i*2].v+s[i*2+1].v;}void ask(int i,int ll,int rr){if(s[i].ad!=0){s[i].v+=s[i].ad*(s[i].r-s[i].l+1);s[2*i].ad+=s[i].ad;s[2*i+1].ad+=s[i].ad;s[i].ad=0;}if(s[i].l>=ll&&s[i].r<=rr){sum+=s[i].v;return;}int kk=i*2;if(s[kk].r>=ll)ask(kk,ll,rr);if(s[kk+1].l<=rr)ask(kk+1,ll,rr);}void add(int i,int ll,int rr,int x){if(s[i].l>=ll&&s[i].r<=rr){s[i].ad+=x;return;}if(ll>=s[i].l&&rr<=s[i].r)s[i].v+=x*(rr-ll+1);else s[i].v+=x*(min(abs(s[i].r-ll+1),abs(rr-s[i].l+1)));if(s[i].ad!=0){s[i].v+=(s[i].r-s[i].l+1)*s[i].ad;s[2*i].ad+=s[i].ad;s[2*i+1].ad+=s[i].ad;s[i].ad=0;}int kk=i*2;if(s[kk].r>=ll)add(kk,ll,rr,x);if(s[kk+1].l<=rr)add(kk+1,ll,rr,x);}int main (){cin>>n;for(int i=1;i<=n;i++)cin>>a[i];cin>>q;build(1,1,n);for(int i=1;i<=q;i++){int k;cin>>k;if(k==1){int b,c,d;cin>>b>>c>>d;add(1,b,c,d);}if(k==2){int b,c;cin>>b>>c;sum=0;ask(1,b,c);cout<<sum<<endl;}}}
阅读全文
0 0
- CODEVS-1082-线段树练习3-splay
- 【codevs 1082】线段树练习3
- codevs 1082 线段树练习 3
- codevs 1082 线段树练习3
- 【codevs 1082】线段树练习 3
- codevs线段树练习3
- <线段树系列3> codevs 1082 线段树练习3
- 【Codevs】1082 线段树练习 3 && 线段树模板
- Codevs 1082 线段树练习 3(线段树&&分块)
- 【codevs 1080~1082】线段树练习重做
- <线段树系列2> codevs 1082 线段树练习2
- [codevs] 线段树练习4
- CODEVS 1080线段树练习
- 1080 线段树练习 codevs
- CODEVS 1080 线段树练习
- [Codevs] 1080 线段树练习
- 【codevs 1080】线段树练习
- codevs 1080~1082 线段树练习系列(模板)
- 延云行业搜索数据库 在大数据生态中位置和重要性
- Java常见异常总结
- vue学习03----vue实例以及生命周期
- 用sql语句直接替换或删除数据库中某字段中的特定字符
- 文章标题
- codevs 1082 线段树练习3
- HDU3569(90/600)
- python unittest 自动化测试
- session & cookie详解
- Java邮件开发前期准备之DOS下用SMTP发送邮件测试
- linux系统编程-read()write()函数分析
- html5以及jQuery实现本地图片上传前的预览
- 局部指针变量为什么可以正确返回?
- 排序(二)