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

简单线段树模板[通俗易懂]例如: 给你任意几个数,给定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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • MJKDZ PS2手柄控制OskarBot小车(一):Arduino串口发送数据

    MJKDZ PS2手柄控制OskarBot小车(一):Arduino串口发送数据MJKDZPS2手柄控制OskarBot小车(一):Arduino串口发送数据【目录】    -1、无线通信模块设置        -1.1设置参数        -1.2调试步骤    -2、按键与通信格式        -2.1PS2按键定义        -2.2发送数据格式    -3、源代码        -3.1串口手…

    2022年5月18日
    37
  • 转:ATI显卡的机器上安装Linux花屏解决办法

    转:ATI显卡的机器上安装Linux花屏解决办法

    2021年9月5日
    51
  • 安卓性能调优:内存使用分析和方法调用优化

    安卓性能调优:内存使用分析和方法调用优化

    2021年8月27日
    44
  • 逆波兰法表示的表达式_波兰表达式和逆波兰

    逆波兰法表示的表达式_波兰表达式和逆波兰根据 逆波兰表示法,求表达式的值。有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。 示例 1:输入:tokens = [“2″,”1″,”+”,”3″,”*”]输出:9解释:该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9示例 2:输入:tokens = [“4″,”13″,”5″,”/”,”+”]输

    2022年8月9日
    8
  • W3C规范_web标准和w3c标准

    W3C规范_web标准和w3c标准万维网联盟(外语缩写:W3C)标准不是某一个标准,而是一系列标准的集合。网页主要由三部分组成:结构(Structure)、表现(Presentation)和行为(Behavior)。对应的标准也分三方面:结构化标准语言主要包括XHTML和XML,表现标准语言主要包括CSS,行为标准主要包括对象模型(如W3CDOM)、ECMAScript等。这些标准大部分由W3C起草和发布,也…

    2022年9月17日
    0
  • CTFshow——SSTI

    CTFshow——SSTI首先一定要了解有关python类的知识:python__base__等内置方法pythoninspect模块解析#coding=utf-8__author__=”leaves”classBase(object):a=0def__init__(self):self._a=10passclassChild(Base):”测试测试”_b=10def__str__(

    2022年10月20日
    0

发表回复

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

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