简单线段树模板
来源:互联网 发布:ubuntu文本输入 编辑:程序博客网 时间:2024/06/06 04:50
例如: 给你任意几个数,给定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;
}
- 简单线段树模板
- 简单线段树模板
- 线段树(简单模板)
- 线段树简单入门模板--单点更新
- 线段树基础与模板与简单应用
- ACM 线段树模板(模板)
- 线段树模板
- hdu_1166_线段树模板
- 线段树模板
- 线段树模板 poj2777
- 线段树模板
- 线段树模板
- 线段树-模板
- 线段树模板
- 线段树模板
- 线段树模板
- Hdu1166-- 线段树模板
- 线段树模板
- java.util.zip.ZipException: duplicate entry during packageAllDebugClassesForMultiDex
- 为何我看好老幼监控直播市场
- maven与hibernate的配置
- [Android] Android项目Tab类型主界面Fragment+TabPageIndicator+ViewPager
- Unity4.X AssetBundle工具BundleManager
- 简单线段树模板
- 原生JS(JavaScript)
- android 服务的绑定调用
- 剑指offer - 面试题5:从尾到头打印链表
- Linux-系统管理-常用命令(下)
- Codeforces-401C-Team
- 2016/9/19
- Android Studio版本控制之SVN图文教程篇
- 完美世界编程题2