线段树模板

👨‍💻 建树

struct node{
  int l, r;
  int dat;
}t[size * 4]

void build(int p, int l, int r){
  t[p].l = l;
  t[p].r = r;
  if(l == r){
    t[p].dat = a[l];
    return;
  }
  int mid = (l + r) / 2;
  build(p * 2, l, mid);
  build(p * 2 + 1, mid + 1, r);
  t[p].dat = max(t[p * 2].dat, t[p * 2 + 1].dat); 
}

build(1, 1, n);

⛷️ 单点修改

void change(int p, int x, int v){
  if(t[p].l == t[p].r){
    t[p].dat = v;
    return;
  }
  
  int mid = (t[p].l + t[p].r) / 2;
  
  if(x <= mid) change(p * 2, x, v);
  else change(p * 2 + 1, x, v);
  t[p].dat = max(t[p * 2].dat, t[p * 2 + 1].dat);
}

change(1, x, v);

🦥 区间的查询

posted @ 2022-02-04 14:13  Ansary  阅读(33)  评论(0)    收藏  举报