线段树的简单实现

线段树的简单实现

ID:38746574

大小:81.50 KB

页数:20页

时间:2019-06-18

线段树的简单实现_第1页
线段树的简单实现_第2页
线段树的简单实现_第3页
线段树的简单实现_第4页
线段树的简单实现_第5页
资源描述:

《线段树的简单实现》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、线段树的简单实现:#include#include#defineMaxSize1000typedefcharElemType;typedefstructnode{inti,j;intcover;structnode*lchild,*rchild;}ITree;//建立线段树ITree*CreateTree(inta,intb){ITree*r;if(bi=a;r->j=b;r->cove

2、r=0;if(b-a>1){r->lchild=CreateTree(a,(a+b)/2);r->rchild=CreateTree((a+b)/2,b);}elser->lchild=r->rchild=NULL;returnr;}//线段树的插入voidInsTree(ITree*r,inta,intb){intmid;if(a<=r->i&&r->j<=b)r->cover++;else{mid=(r->i+r->j)/2;if(b<=mid)InsTree(r->lchild,a,b);elseif(mid<=

3、a)InsTree(r->rchild,a,b);else{InsTree(r->lchild,a,mid);InsTree(r->rchild,mid,b);}}}//线段树的删除voidDelTree(ITree*r,inta,intb){intmid;if(a<=r->i&&r->j<=b)r->cover--;else{mid=(r->i+r->j)/2;if(b<=mid)DelTree(r->lchild,a,b);elseif(mid<=a)DelTree(r->rchild,a,b);else{DelT

4、ree(r->lchild,a,mid);DelTree(r->rchild,mid,b);}}}//计算线段树的测度intCount(ITree*r){if(r->cover>0)returnr->j-r->i;elseif(r->j-r->i==1)return0;elsereturnCount(r->lchild)+Count(r->rchild);}//主函数intmain(){ITree*r;inta,b,a1,b1,a2,b2,a3,b3,n,i;printf("请输入线段树的区间端点:");while(s

5、canf("%d%d",&a,&b)!=EOF){r=CreateTree(a,b);printf("请输入插入3条线段的区间端点:");scanf("%d%d%d%d%d%d",&a1,&b1,&a2,&b2,&a3,&b3);InsTree(r,a1,b1);InsTree(r,a2,b2);InsTree(r,a3,b3);printf("插入3条线段后线段树的测度为%d",Count(r));printf("请输入删除2条线段的区间端点:");scanf("%d%d%d%d",&a1,&b1,&a2,&b2

6、);DelTree(r,a1,b1);DelTree(r,a2,b2);printf("删除2条线段后线段树的测度为%d",Count(r));printf("请输入线段树的区间端点:");}return0;}pku2528(离散化+线段树)2010-03-1616:42#include#includeusingnamespacestd;structnode{intleft,right;intcount;}tree[160020];intposter[10003][2]

7、;intflag[20003];inthash[10000003];//hash函数。intsum;intcmp(constvoid*a,constvoid*b){return*(int*)a-*(int*)b;}voidBuild(intk,inti,intj)//利用完全二叉树建树。{tree[k].left=i;tree[k].right=j;tree[k].count=0;if(i!=j){intmid=(i+j)/2;Build(2*k,i,mid);Build(2*k+1,mid+1,j);}return;

8、}voidInsert(inti,intcolor,intfrom,intto){if(tree[i].left==from&&tree[i].right==to){tree[i].count=color;return;}if(tree[i].count==color)return;if(tree[i].count!=-1&&tr

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。