简单单点更新线段树
2015-07-13 13:53
288 查看
简单线段树
hdu1166
View Code
hdu1166
#include<stdio.h> #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define maxn 101000 int sum[maxn<<2],mark[maxn<<2]; void pushup(int rt) { sum[rt]=sum[rt<<1]+sum[rt<<1|1]; } void build(int l,int r,int rt) { mark[rt]=0; if(l==r) { sum[rt]=1; return; } int m=(l+r)/2; build(lson); build(rson); pushup(rt); } void pushdown(int rt,int len) { if(mark[rt]) { mark[rt<<1|1]=mark[rt<<1]=mark[rt]; sum[rt<<1]=mark[rt]*(len-len/2); sum[rt<<1|1]=mark[rt]*(len/2); mark[rt]=0; } } void updata(int L,int R,int c,int l,int r,int rt) { if(l>=L&&R>=r) { mark[rt]=c; sum[rt]=c*(r-l+1); return; } pushdown(rt,r-l+1); int m=(l+r)/2; if(m>=L) updata(L,R,c,lson); if(R>m) updata(L,R,c,rson); pushup(rt); } int main() { int n,m,t,ff=0; scanf("%d",&t); while(t--) { scanf("%d",&n); build(1,n,1); scanf("%d",&m); while(m--) { int x,y,z; scanf("%d%d%d",&x,&y,&z); updata(x,y,z,1,n,1); } printf("Case %d: The total value of the hook is %d.\n",++ff,sum[1]); } }
View Code
相关文章推荐
- android开发环境搭建
- Java EE实现模拟一个资源管理器
- C语言学习进程:fseek与ftell函数
- vim tips
- JQuery.Ajax之错误调试帮助信息
- MySQL乱码问题以及utf8mb4字符集---utf8mb4和utf8有什么区别? emoji表情与utf8mb4
- 分享JS代码(转)
- SubShader TAG的说明
- python第三方库系列之十八--python/django test库
- API Caller,计算机网络和算法
- 汇编语言:实验六 实践课程中的程序
- 总结MFC中OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别
- Nginx配置选项及模块详解
- 【转】opencv中widthStep不一定等于width*nChannels的原因
- openrefactory/c之添加自反任务(四)
- GRE写作必备句型
- Spring官网改版后下载
- openvz 双网卡桥接
- JSON 方法使用
- 彻底了解mapreduce核心Shuffle--解惑各种mapreduce问题