简单线段树模板
2016-09-19 23:59
330 查看
例如: 给你任意几个数,给定N个区间,让你求这个区间的和;简单线段树的运用,帮助我更好的理解线段树,
//线段树基本
#include<stdio.h>
#define MAXN 100100
#define MINN 10000100
int num[MAXN],t[MINN];
void build(int L,int R,int d)
{ if(L==R)
{ t[d]=num[L];
return ;
}
else
{ int mid=(L+R)/2;
build(L,mid,d*2);
build(mid+1,R,2*d+1);
}
t[d]=t[2*d]+t[2*d+1];//回溯很重要容易漏;
}
int inqure(int L,int R,int cl,int cr,int d)
{ if(L==cl&&R==cr)
{ return t[d];
}
else
{
int mid=(L+R)/2;
if(cr<=mid)
return inqure(L,mid,cl,cr,d*2);
else if(cl>mid)
return inqure(mid+1,R,cl,cr,d*2+1);
else
{
return inqure(L,mid,cl,mid,d*2)+inqure(mid+1,R,mid+1,cr,d*2+1);//查找时候的判断分为三种情况,全在左面就左查,右面就右查,左右都有就两个都查然后相加;
}
}
}
int main()
{ int t,n,i,l,r,q;
scanf("%d",&t);
while(t--)
{ scanf("%d",&n);
for(i=1;i<=n;i++)
{ scanf("%d",&num[i]);
}
build(1,n,1);//从父结点开始建立//
scanf("%d",&q);
for(i=1;i<=q;i++)
{ scanf("%d %d",&l,&r);
int sum=inqure(1,n,l,r,1);//从树根开始查找;
printf("%d\n",sum);
}
}
return 0;
}
//线段树基本
#include<stdio.h>
#define MAXN 100100
#define MINN 10000100
int num[MAXN],t[MINN];
void build(int L,int R,int d)
{ if(L==R)
{ t[d]=num[L];
return ;
}
else
{ int mid=(L+R)/2;
build(L,mid,d*2);
build(mid+1,R,2*d+1);
}
t[d]=t[2*d]+t[2*d+1];//回溯很重要容易漏;
}
int inqure(int L,int R,int cl,int cr,int d)
{ if(L==cl&&R==cr)
{ return t[d];
}
else
{
int mid=(L+R)/2;
if(cr<=mid)
return inqure(L,mid,cl,cr,d*2);
else if(cl>mid)
return inqure(mid+1,R,cl,cr,d*2+1);
else
{
return inqure(L,mid,cl,mid,d*2)+inqure(mid+1,R,mid+1,cr,d*2+1);//查找时候的判断分为三种情况,全在左面就左查,右面就右查,左右都有就两个都查然后相加;
}
}
}
int main()
{ int t,n,i,l,r,q;
scanf("%d",&t);
while(t--)
{ scanf("%d",&n);
for(i=1;i<=n;i++)
{ scanf("%d",&num[i]);
}
build(1,n,1);//从父结点开始建立//
scanf("%d",&q);
for(i=1;i<=q;i++)
{ scanf("%d %d",&l,&r);
int sum=inqure(1,n,l,r,1);//从树根开始查找;
printf("%d\n",sum);
}
}
return 0;
}
相关文章推荐
- 线段树基础与模板与简单应用
- 简单树刨+线段树模板 877E - Danil and a Part-time Job
- 简单线段树模板
- 线段树简单入门模板--单点更新
- 线段树(简单模板)
- 线段树:CDOJ1591-An easy problem A (RMQ算法和最简单的线段树模板)
- ABAP--SAP的SCreen录入的简单模板
- 关于IBatisNet的两个简单CodeSmith模板
- ABAP--SAP的SCreen录入的简单模板
- 默默简单的写了一个模板引擎
- 不要递给我花里胡俏的简历,给我一点简洁(不是简单)而能突出你自己的表达——面对成千上万的求职者,你真的以为HR会去看你那封100个人有99个差不多的求职信、和装订得像书本一样的简历模板内容吗?
- [DataGrid技巧]将RadioButton加入到DataGrid模板列后单选简单实现
- 简单的模板实例,实现简单的运算符重载
- ABAP--SAP的SCreen录入的简单模板
- 学习C++模板---模板类带简单参数,并且添加缺省参数
- XML与ASP简单结合实现HTML模板功能
- dotNet中ArrayList的C++模板简单实现
- XML与ASP简单结合实现HTML模板功能
- XML与ASP简单结合实现HTML模板功能
- 简单但还比较实用的模板技术