:heavy_check_mark: BinaryIndexedTree
(data_structure/binary_indexed_tree.hpp)

Verified with

Code

#pragma once
#include<vector>

/**
 * @brief BinaryIndexedTree
 */

struct BIT{
    std::vector<long long> bit;
    int n;
    BIT(long long n):n(n){
        bit.resize(n+1,0);
    }
    //0-indexed [0,x)-sum

    long long sum(long long x){
        long long res=0;
        for(int i=x;i;i-=i&-i)res+=bit[i];
        return res;
    }
    //0-indexed [x,y)-sum

    long long sum(long long x,long long y){
        return sum(y)-sum(x);
    }
    //0-indexed

    void add(long long x,long long val){
        if(x>=n)return;
        for(long long i=x+1;i<=n;i+=i&-i)bit[i]+=val;
    }
};
#line 2 "data_structure/binary_indexed_tree.hpp"
#include<vector>

/**
 * @brief BinaryIndexedTree
 */

struct BIT{
    std::vector<long long> bit;
    int n;
    BIT(long long n):n(n){
        bit.resize(n+1,0);
    }
    //0-indexed [0,x)-sum

    long long sum(long long x){
        long long res=0;
        for(int i=x;i;i-=i&-i)res+=bit[i];
        return res;
    }
    //0-indexed [x,y)-sum

    long long sum(long long x,long long y){
        return sum(y)-sum(x);
    }
    //0-indexed

    void add(long long x,long long val){
        if(x>=n)return;
        for(long long i=x+1;i<=n;i+=i&-i)bit[i]+=val;
    }
};
Back to top page