• 线段树


    先放一个模板吧

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #define mid  ((l + r) >> 1)
    #define lson rt << 1, l, mid
    #define rson rt << 1 | 1, mid + 1, r
    #define ls rt << 1
    #define rs rt << 1 | 1
    #define tag tree[rt].lazy
    using namespace std;
    typedef long long ll;
    const int N = 4e5 + 10;
    struct Tree {
    	int l, r;
    	ll value, lazy;
    }tree[N];
    void push_down(int rt) {
    	if(tag) {
    		tree[ls].value += tag * (tree[ls].r - tree[ls].l + 1);
    		tree[rs].value += tag * (tree[rs].r - tree[rs].l + 1);
    		tree[ls].lazy += tag; 
    		tree[rs].lazy += tag;
    		tag = 0;
    	}
    }
    void build(int rt, int l, int r) {
    	tree[rt].l = l;
    	tree[rt].r = r;
    	tree[rt].lazy = 0;
    	if(l == r) {
    		scanf("%lld", &tree[rt].value);
    		return ;
    	}
    	build(lson);
    	build(rson);
    	tree[rt].value = tree[ls].value + tree[rs].value;
    }
    ll Query(int rt, int l, int r, int L, int R) {//区间查找。 
    	if(l >= L && r <= R)
    		return tree[rt].value;
    	push_down(rt);
    	ll a = 0, b = 0;
    	if(L <= mid)	a = Query(lson, L, R);
    	if(R > mid)	b = Query(rson, L, R);
    	return a + b;
    }
    ll Query(int rt, int l, int r, int dis) {//单点查找。 
    	return Query(rt, l, r, dis, dis);
    }
    void Update(int rt, int l, int r, int L, int R, ll k) {//区间跟新。 
    	if(l >= L && r <= R) {
    		tree[rt].value += k * (tree[rt].r - tree[rt].l + 1);
    		tree[rt].lazy += k;
    		return ;
    	}
    	push_down(rt);
    	if(L <= mid)	Update(lson, L, R, k);
    	if(R > mid)	Update(rson, L, R, k);
    	tree[rt].value = tree[ls].value + tree[rs].value;
    }
    void Update(int rt, int l, int r, int dis, ll k) {//单点跟新。 
    	Update(rt, l, r, dis, dis, k);
    } 
    void print(int rt, int l, int r) {//输出所有的叶子的值。 
    	if(l == r) {
    		printf("%lld ", tree[rt].value);
    		return ;
    	}
    	print(lson);
    	print(rson);
    }
    int main() {
    	
    	return 0;
    }
    
    
  • 相关阅读:
    Linux之权限
    Linux基础和文件操作
    linux之用户、用户组、用户提权
    linux之Vim使用
    java面向对象
    eclipse首选项常用设置
    eclipse中添加项目运行程序
    eclipse的基本配置
    eclipse安装
    Jemter压力测试核心流程
  • 原文地址:https://www.cnblogs.com/lifehappy/p/12601176.html
Copyright © 2020-2023  润新知