简单线段树模板[通俗易懂]

简单线段树模板[通俗易懂]例如: 给你任意几个数,给定N个区间,让你求这个区间的和;简单线段树的运用,帮助我更好的理解线段树,           //线段树基本#include#defineMAXN100100#defineMINN10000100int num[MAXN],t[MINN];voidbuild(intL,intR,intd){     if(L==R)

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

                 例如:   给你任意几个数,给定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;
 }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/178798.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 单例模式和配置admin[通俗易懂]

    单例模式和配置admin

    2022年4月2日
    205
  • 银行风控模型

    银行风控模型风控催生原因对于银行来说,现今互联网贷款和信用卡办理面临的主要难题是数据和风控。站在银行或金融机构角度,自然而然是想获得更多的信息和数据,但是在收集数据这方面又是比较无力的。加上当下的发展趋势,消费贷以及贷款审批速度都要求快。如何在快的的过程中对客户进行一个全面的审查,得出一个合理的结果呢?如果没有详细的数据对客户进行评估,这势必会提高放贷的风险。风控概述所谓风控,是指多银行贷款资金的…

    2022年6月13日
    35
  • 事务隔离级别与锁的对应关系_X1800S

    事务隔离级别与锁的对应关系_X1800S隔离级别org.springframework.transaction.annotation.Isolationpublic enum Isolation { DEFAULT(-1), READ_UNCOMMITTED(1), READ_COMMITTED(2), REPEATABLE_READ(4), SERIALIZABLE(8);}DEFAULT :这是默认值,表示使用底层数据库的默认隔离级别。对大部分数据库而言,通常这值就是: READ_CO..

    2022年8月9日
    1
  • pl/sql developer使用教程13_PLSQL Developer

    pl/sql developer使用教程13_PLSQL Developer.Net程序员学用Oracle系列(18):PLSQLDeveloper攻略1、功能说明及使用技巧1.1、对象浏览器1.2、SQL窗口1.3、测试窗口1.4、命令窗口1.5、图表窗口

    2022年8月6日
    20
  • java拦截器_Java拦截器[通俗易懂]

    java拦截器_Java拦截器[通俗易懂]拦截器,主要用于拦截前端请求,常用于登录检查。下面是演示使用拦截器拦截未登录的用户访问需要登录的模块情景,使用配置方式实现和注解方式实现代码:配置方式:1、web.xml中配置监听器,对于所有的/admin开头的请求,都走com.blog.interceptor.LoginInterceptor这个拦截器。2、再看com.blog.interceptor.LoginInterceptor的实现代码…

    2022年4月29日
    184
  • javacv学习之实现matlab中imfill算法(孔洞填充)

    javacv学习之实现matlab中imfill算法(孔洞填充)因生产需要计算图像的面积,首先第一步就是要先将图像中有洞的地方给它填上,网上找了半天说是matlab中的imfill算法就能直接填上,但我对matlab也不熟也不想用它,结果网上搜资料看看到很多C++的博主写的可以直接用opencv搞定,我一想opencv能搞定那肯定javacv也能搞,所以就有了下面的内容。废话不多说直接上代码publicstaticvoidmain(String[]args){System.loadLibrary(Core.NATIVE_LIBRAR

    2022年9月2日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号