hihoCoder 1078 线段树的区间修改
2015-08-03 10:40
381 查看
<pre name="code" class="cpp">#include <iostream> #include <cstdio> #include <cstring> #define N 100005 using namespace std; struct node{ int l,r,sum; int sett; }tree[N<<2]; int a ; int ans; void build(int m,int l,int r){ tree[m].l = l; tree[m].r = r; tree[m].sett = -1; if(l == r){ tree[m].sum = a[l]; return; } int mid = (l+r)>>1; build(m<<1,l,mid); build((m<<1)+1,mid+1,r); tree[m].sum = tree[m<<1].sum + tree[(m<<1)+1].sum; } void pushdown(int m){ if(tree[m].l >= tree[m].r) return; if(tree[m].sett != -1){ tree[m<<1].sett = tree[(m<<1)+1].sett = tree[m].sett; tree[m<<1].sum = (tree[m<<1].r-tree[m<<1].l+1)*tree[m].sett; tree[(m<<1)+1].sum = (tree[(m<<1)+1].r-tree[(m<<1)+1].l+1)*tree[m].sett; tree[m].sett = -1; } } void maintain(int m){ tree[m].sum = tree[m<<1].sum + tree[(m<<1)+1].sum; } void update(int m,int l,int r,int val){ if(tree[m].l >= l && tree[m].r <= r){ tree[m].sett = val; tree[m].sum = (tree[m].r-tree[m].l+1)*val; return; } pushdown(m); int mid = (tree[m].l+tree[m].r)>>1; if(l <= mid) update(m<<1,l,r,val); if(mid < r) update((m<<1)+1,l,r,val); maintain(m); } void query(int m,int l,int r){ if(tree[m].l >= l && tree[m].r <= r){ ans += tree[m].sum; return; } pushdown(m); int mid = (tree[m].l+tree[m].r)>>1; if(l <= mid) query(m<<1,l,r); if(mid < r) query(m<<1|1,l,r); maintain(m); } int main(){ int n,m; while(~scanf("%d",&n)){ for(int i = 1; i <= n; i++) scanf("%d",&a[i]); build(1,1,n); scanf("%d",&m); int op,a,b,c; for(int i = 1; i <= m; i++){ scanf("%d",&op); if(op == 0){ ans = 0; scanf("%d%d",&a,&b); query(1,a,b); printf("%d\n",ans); } else{ scanf("%d%d%d",&a,&b,&c); update(1,a,b,c); } } } return 0; }
相关文章推荐
- 第11章 散列表
- 覆盖度统计及测试流程
- COPY 构建亿级前端读服务
- 南邮 OJ 1024 01排序
- 7. Document write() 方法
- 欢迎使用CSDN-markdown编辑器
- awk 两个文件的两个列若相同,合并两个文件
- poj1797
- windows 判断环境变量有无输入正确 echo %JAVA_HOME%
- [深入理解Android卷二 全文-第二章]深入理解Java Binder和MessageQueue
- 7月国内网站流量统计TOP5:百度腾讯涨幅明显
- 怎么用pfSense为你的web服务做负载均衡
- 在命令行界面使用vs2008的cl 进行编译
- iOS 去掉系统bar自带的线
- javascript实现超炫的向上滑行菜单实例
- 作业盒子刘夜: 我如何获得奶茶妹妹“处女投”
- Highcharts中字符串处理方式(1)
- css大会网站顶部的一个特效
- shell 总结 单引号 双引号 花括号
- POJ 1035 Spell checker(暴力)