HDU-1698(线段树入门)
来源:互联网 发布:淘宝改版中国质造 编辑:程序博客网 时间:2024/06/12 00:52
请您先别看着个代码,这个代码是我自己在通过自己对线段树的了解,自己写的...
那不是一般的烂...是经过我无数的改正才改过来的 希望大家不要借鉴哦,,一会等我看看,别人的代码,然后再整理整理,出个漂亮的代码.嘿嘿
这个是超时的....
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>int N;struct Node{int left;int right;int val;}tnode[1000005];void Buildtree(int l,int r,int n,int t){int mid=(r+l)/2;if(l!=0&&r!=0){if(l!=r){tnode[n].left=l;tnode[n].right=r;tnode[n].val=t;Buildtree(l,mid,2*n,mid-l+1);Buildtree(mid+1,r,2*n+1,r-mid);}else{tnode[n].left=l;tnode[n].right=r;tnode[n].val=1;}}}void update(int n){if(n==0)return;if(n%2==0){tnode[n/2].val=tnode[n].val+tnode[n+1].val;update(n/2);//printf("update(l=%d___r=%d)==%d\n",tnode[n/2].left,tnode[n/2].right,tnode[n/2].val);}else{tnode[(n-1)/2].val=tnode[n].val+tnode[n-1].val;update((n-1)/2);}}int getsum(){return tnode[1].val;}void motify(int l,int r,int val,int n){int mid=(tnode[n].left+tnode[n].right)/2;if(tnode[n].left==l&&tnode[n].right==r&&l==r){tnode[n].val=val;update(n);}else{if(r<=mid){motify(l,r,val,2*n);}else if(l>=mid+1){motify(l,r,val,2*n+1);}else if(l<=mid&&r>=mid+1){motify(l,mid,val,2*n);motify(mid+1,r,val,2*n+1);}}}int main(){int T;int M;while(scanf("%d",&T)!=EOF){for(int k=1;k<=T;k++){scanf("%d",&N);Buildtree(1,N,1,10);//for(int i=1;i<=30;i++)//{//printf("i=%d__l=%d____r=%d____val=%d__\n",i,tnode[i].left,tnode[i].right,tnode[i].val);//}//printf("\n");//system("pause");scanf("%d",&M);int a,b,val;for(int i=1;i<=M;i++){scanf("%d%d%d",&a,&b,&val);motify(a,b,val,1);//for(int i=1;i<=30;i++)//{//printf("i=%d__l=%d____r=%d____val=%d__\n",i,tnode[i].left,tnode[i].right,tnode[i].val);//}//printf("\n");}printf("Case %d: The total value of the hook is ",k);int ans=getsum();printf("%d.\n",ans);}}return 0;}
下面不上比较好看的代码..嘿嘿,,
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>int N;struct Node{int left;int right;int val;}tree[300005];int Buildtree(int i,int a,int b){tree[i].left=a;tree[i].right=b;if(a==b){return tree[i].val=1;}int mid=(a+b)/2;return tree[i].val=Buildtree(2*i,a,mid)+Buildtree(2*i+1,mid+1,b);}int update(int i,int a,int b,int val){if(tree[i].left==tree[i].right){return tree[i].val=val;}int mid=(tree[i].left+tree[i].right)/2;if(a>mid){return tree[i].val=update(2*i+1,a,b,val)+tree[2*i].val;}else if(b<=mid){return tree[i].val=update(2*i,a,b,val)+tree[2*i+1].val;}else{return tree[i].val=update(2*i,a,mid,val)+update(2*i+1,mid+1,b,val);}}int main(){int T;int M;scanf("%d",&T);for(int k=1;k<=T;k++){scanf("%d",&N);Buildtree(1,1,N);//printf("%d____\n",tree[1].val);scanf("%d",&M);for(int i=1;i<=M;i++){int a,b,val;scanf("%d%d%d",&a,&b,&val);update(1,a,b,val);//printf("%d******\n",tree[1].val);}printf("Case %d: The total value of the hook is %d.\n",k,tree[1].val);}return 0;}
- HDU-1698(线段树入门)
- HDU-1754(线段树入门)
- HDU-1166(线段树入门)
- HDU-2795(线段树入门)
- hdu 1754 线段树入门
- hdu 2795 线段树入门
- hdu 1166线段树入门
- hdu 1556 线段树入门
- HDU 1754(线段树入门)
- hdu 1698 线段树区间更新入门(lazy标记)
- HDU 1754 线段树 及其 入门知识
- hdu 1754 线段树入门的题
- hdu 1166 树状数组 线段树入门
- 线段树入门——HDU 1754
- hdu 1823(二维线段树入门题)
- HDU 1166 敌兵布阵 线段树入门
- HDU 1166敌兵布阵-线段树入门
- hdu 1394 ------线段树入门题目
- 指针与const之间的组合,写了个例子温习一下
- POJ 1751 Highways 最小生成树
- APIO2007 数据备份 贪心+堆实现
- ubuntu 备份还原
- UtilBox基础组件
- HDU-1698(线段树入门)
- java 远程调试butterfly
- Warning: The Copy Bundle Resources build phase contains this target's Info.plist file 'Info
- 多线程 NSThread
- java实现标点全角/半角转换
- 关于sfo的备注和bo的备注字段
- 【动态规划】背包问题
- 读书笔记整理八:智能基础结构增强功能11g
- 程式中打开windows上本机已存在的服务