Codevs 1082
2016-08-18 09:18
190 查看
#include<cstdio> #include<iostream> #include<cmath> #include<queue> #include<stack> #include<vector> #include<iomanip> #include<algorithm> #include<string> #include<cstring> #include<cstdlib> #include<bitset> #define LL long long using namespace std; struct data { int left,right; long long sum; int l,r; }; data te[400005]; int n,q,a,b,w,cnt,p; long long ans; int change[400005]//here,c[200005]; void update(int x) { te[x].sum=te[te[x].left].sum+te[te[x].right].sum; } int build(int s,int t) { cnt++; int k=cnt; te[k].l=s;te[k].r=t; if (s==t) { te[k].sum=c[s]; return k; } int mid=(s+t)>>1; te[k].left=build(s,mid); te[k].right=build(mid+1,t); update(k); return k; } void paint(int x,int k){ te[x].sum+=((LL)te[x].r-te[x].l+1)*k; change[x]+=k; } void pushdown(int x){ paint(te[x].left,change[x]); paint(te[x].right,change[x]); change[x]=0; } void insert(int x) { if (x!=0) { if (change[x]!=0) pushdown(x); if (te[x].l>=a&&te[x].r<=b) { te[x].sum+=((LL)te[x].r-te[x].l+1)*w; change[x]=w; return ; } int mid=(te[x].l+te[x].r)>>1; if (a<=mid) insert(te[x].left); if (b>mid) insert(te[x].right); update(x); return ; } } long long findsum(int x) { if (x!=0) { if (change[x]!=0) pushdown(x); if (te[x].l>b||te[x].r<a) return 0; if (te[x].l>=a&&te[x].r<=b) return te[x].sum; int mid=(te[x].l+te[x].r)>>1; ans=findsum(te[x].left)+findsum(te[x].right); return ans; } } int main () { freopen ("1082.in","r",stdin); //freopen ("1082.out","w",stdout); scanf ("%d",&n); for (int i=1;i<=n;i++) scanf ("%d",&c[i]); build(1,n); scanf ("%d",&q); for (int i=1;i<=q;i++) { scanf ("%d",&p); if (p==1) { scanf ("%d%d%d",&a,&b,&w); insert(1); } if (p==2) { scanf ("%d%d",&a,&b); printf ("%lld\n",findsum(1)); } } return 0; }
相关文章推荐
- 企业账号打包如何通过HTML页面打开
- css重要属性float学习
- Android Studio之以引用方式引用外部Library
- iOS开发基础知识--碎片2
- java获取项目访问路径方法
- NOIP 2014 Day2 T1 无线网络发射器选址
- 智能电表管理
- 实习过程中常用到的 技巧(1)
- NOIP 2012 Day1 T3 开车旅行
- Win7 64位环境下,vs2013和Opencv2.4.13的配置
- 长按手势获取UITableView的indexPath值,删除某行
- webstorm快捷键
- 谈C#中的Delegate
- 乐观锁和悲观锁的区别
- AS导入Eclipse项目且不改变目录结构
- C++----练习--引用头文件
- iOS开发基础知识--碎片1
- Golang开发新手常犯的50个错误
- 数据结构上机实验之顺序查找
- 深入理解Java虚拟机之类加载机制