当前位置: 首页 > news >正文

贵州省住房和城乡建设部网站首页天津企业网站设计报价

贵州省住房和城乡建设部网站首页,天津企业网站设计报价,网站开发设计工程师工作前景,h5做网站用什么软件线段树是常用来维护 区间信息 的数据结构 线段树可以在 O(logN) 的时间复杂度内实现 单点修改区间修改区间查询 区间求和求区间最大值求区间最小值 简单介绍一下线段树 线段树是一个将区间内的数不断细分的一种数据结构,也就是一个完全二叉树,用每一…

线段树是常用来维护 区间信息 的数据结构

线段树可以在 O(logN) 的时间复杂度内实现

  • 单点修改
  • 区间修改
  • 区间查询
    • 区间求和
    • 求区间最大值
    • 求区间最小值

简单介绍一下线段树

线段树是一个将区间内的数不断细分的一种数据结构,也就是一个完全二叉树,用每一个叶子节点代表一个区间内的值

操作1:单点修改

单点修改是找到要修改的那个点所在的每一层的区间,最后通过叶子节点,修改为相应的值,然后向上递归

操作2:区间查询

区间查询[l,r]是指在线段树内从上向下查询,如果子区间的左右端点都在[l,r]内则不用在向下递归,直到找到所有的点

常用操作函数

  1. pushup(int u):用子节点的信息更新当前节点
    1. 参数u是根节点
static void pushUp(int u){node[u].sum=node[u<<1].sum+node[u<<1|1].sum;
}
  1. build(int u,int l,int r):在一段区间上初始化线段树
    1. 参数u是根节点,l是区间左端点,r是区间右端点
static void build(int u,int l,int r){if(l==r)node[u]=new Node(l,r,w[r]);else{node[u]=new Node(l,r,0);int mid=l+r>>1;build(u<<1,l,mid);build(u<<1|1,mid+1,r);pushUp(u);}
}
  1. modify(int u,int x,int v):修改某一点的值
    1. 参数u是根节点,x是要修改的节点,v是要增加或减小的值
static void modify(int u,int x,int v){if(node[u].l==node[u].r)node[u].sum+=v;else{int mid=(node[u].l+node[u].r)>>1;if(x<=mid)modify(u<<1,x,v);else modify(u<<1|1,x,v);pushUp(u);}
}
  1. query(int u,int l,int r):查询
    1. 参数u是根节点,l是区间左端点,r是区间右端点
static int query(int u,int l,int r){if(node[u].l>=l&&node[u].r<=r)return node[u].sum;int mid=node[u].l+node[u].r>>1;int sum=0;if(l<=mid)sum+=query(u<<1,l,r);if(r>mid)sum+=query(u<<1|1,l,r);return sum;
}

节点表示

父节点:x/2 ==> x>>1

左儿子:2x ==> x<<1

右儿子:2x+1 ==> x>>1|1


动态求连续区间和

package 线段树;import java.io.BufferedReader;
import java.io.InputStreamReader;public class Main {static int N=1000010;static Node[] node=new Node[N];static int[] w=new int[N];static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));static int n,m;static String[] $;static void pushUp(int u){node[u].sum=node[u<<1].sum+node[u<<1|1].sum;}static void build(int u,int l,int r){if(l==r)node[u]=new Node(l,r,w[r]);else{node[u]=new Node(l,r,0);int mid=l+r>>1;build(u<<1,l,mid);build(u<<1|1,mid+1,r);pushUp(u);}}static int query(int u,int l,int r){if(node[u].l>=l&&node[u].r<=r)return node[u].sum;int mid=node[u].l+node[u].r>>1;int sum=0;if(l<=mid)sum+=query(u<<1,l,r);if(r>mid)sum+=query(u<<1|1,l,r);return sum;}static void modify(int u,int x,int v){if(node[u].l==node[u].r)node[u].sum+=v;else{int mid=(node[u].l+node[u].r)>>1;if(x<=mid)modify(u<<1,x,v);else modify(u<<1|1,x,v);pushUp(u);}}public static void main(String[] args)throws Exception {$=br.readLine().split(" ");n=Integer.parseInt($[0]);m=Integer.parseInt($[1]);$=br.readLine().split(" ");for(int i=1;i<=n;i++)w[i]=Integer.parseInt($[i-1]);build(1,1,n);while (m-->0){$=br.readLine().split(" ");int k=Integer.parseInt($[0]);int a=Integer.parseInt($[1]);int b=Integer.parseInt($[2]);if(k==0)System.out.println(query(1,a,b));else modify(1,a,b);}}
}class Node{int l,r,sum;public Node(int l,int r,int sum){this.l=l;this.r=r;this.sum=sum;}
}
http://www.yayakq.cn/news/145177/

相关文章:

  • 宿迁网站优化排名专业网站建设平台
  • 自适应网站开发工具个人网站备案 照片
  • 沧州做网站哪家好中国石油天然气第六建设公司网站
  • 药品网站建设深圳专业seo外包
  • 朝阳市建设厅查询网站网站备案时间
  • 网站建设招聘信息正确的企业邮箱格式
  • 展览公司网站建设住房建设部官方网站居住区政策
  • 凡科网怎么建网站虎丘做网站价格
  • 深圳网站建设设计定做ev123建站
  • 微信公众号微网站制作免费做产品画册的网站
  • 莆田网站建设技术托管招应届培训网页设计
  • 宜昌需要做网站建设的公司平台推广是什么工作
  • 盘锦门户网站制作seo综合查询站长工具关键词
  • wordpress电子商务站公司建设网站的请示
  • 服装设计有哪些网站合肥网站网站建设
  • 厦门网站推广公司一个完整的网站制作流程
  • 用jq和ajax做能登陆注册的一个网站天河区建设和水务局网站
  • 介休做网站建设网站的公司
  • 飘仙建站论坛织梦cms收费
  • wordpress建立手机网站seo网站优化培训厂家报价
  • 百度网站网址是什么网站开发后服务费
  • 官方网站建设 磐石网络知名建设网站需要什么技术人员
  • 专业做毕业设计网站设计建筑案例网站
  • 跨境建站平台赤峰网站建设red
  • 做运营需要看的网站区域名 网站建设公司的销售好做吗
  • 长宁手机网站建设宿迁网络公司哪家专业
  • 做外贸现在一般都通过哪些网站做外贸网站渠道
  • 教育培训手机网站模板下载网站建设拟解决问题
  • 培训机构seo东莞网站seo优化
  • 重庆平台网站建设平台网站开发客户流程 6个阶段