zoukankan      html  css  js  c++  java
  • 【数据结构】树状数组(简单名次树)

    struct BinaryIndexTree {
    
        static const int MAXN = 500000 + 10;
    
        int n, A[MAXN];
        int cnt[MAXN], siz[MAXN];
    
        void InitValue() {
            n = 0;
        }
    
        void UseValue(int val) {
            A[++n] = val;
        }
    
        void Init() {
            sort(A + 1, A + 1 + n);
            n = unique(A + 1, A + 1 + n) - (A + 1);
            memset(siz, 0, sizeof(siz[0]) * (n + 1));
        }
    
        void Insert(int val, int num) {
            int pos = lower_bound(A + 1, A + 1 + n, val) - A;
            cnt[pos] += num;
            for(int i = pos; i <= n; i += i & (-i))
                siz[i] += num;
        }
    
        void Remove(int val, int num) {
            int pos = lower_bound(A + 1, A + 1 + n, val) - A;
            num = min(cnt[pos], num);
            cnt[pos] -= num;
            for(int i = pos; i <= n; i += i & (-i))
                siz[i] -= num;
        }
    
        int GetRank(int val) {
            int pos = lower_bound(A + 1, A + 1 + n, val) - A, res = 1;
            for(int i = pos - 1; i; i -= i & (-i))
                res += siz[i];
            return res;
        }
    
    } bit;
    
  • 相关阅读:
    常用数列
    sqrt
    树状数组
    hash
    P1102 A-B数对
    codevs 1795 金字塔 2
    P2296 寻找道路
    [USACO16JAN]子共七Subsequences Summing to Sevens
    P3397 地毯
    关于调用&&传址
  • 原文地址:https://www.cnblogs.com/purinliang/p/14265133.html
Copyright © 2011-2022 走看看