线段树学习(1)

本文分享了作者初学线段树的心得,介绍了线段树的基本结构,并提供了构建和插入操作的实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天开始学习线段树,写了两个函数,也没有调试过,不知对不对~呵呵。。。
  1. #include<iostream>
  2. using namespace std;
  3. struct segment_tree
  4. {
  5.     int l,r,n;
  6.     struct segment_tree *left , *right;
  7. };
  8. void build ( segment_tree *t , int l , int r )
  9. {
  10.     int m;
  11.     segment_tree *p;
  12.     if ( l>r )
  13.         return ;
  14.     m=(l+r)/2;
  15.     if ( l==r && m==l )
  16.         return;
  17.     p=new segment_tree;
  18.     p->l=l,p->r=m,p->n=0;
  19.     t->left=p;
  20.     build(p,l,m);
  21.     p=new segment_tree;
  22.     p->l=m+1,p->r=r,p->n=0;
  23.     t->right=p;
  24.     build(p,m+1,r);
  25. }
  26. void insert ( segment_tree *t , int l , int r )
  27. {
  28.     int m;
  29.     if ( t->l==l && t->r==r )
  30.     {
  31.         t->n++;
  32.         return ;
  33.     }
  34.     if ( t->l==t->r )
  35.         return;
  36.     m=(t->l+t->r)>>1;
  37.     if ( m>=r )
  38.         insert(t->left , l , m );
  39.     else
  40.         if ( m<l )
  41.             insert(t->right , m+1, r );
  42.         else
  43.         {
  44.             insert(t->left , l , (l+r)>>1 );
  45.             insert(t->right, (l+r)>>1 , r );
  46.         }
  47. }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值