• 【数据结构】树状数组(简单名次树)


    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;
    
  • 相关阅读:
    bzoj1053(反素数)
    poj1442(对顶堆)
    poj2823(单调队列)
    poj3630(简单tire)
    poj1924(单调栈求最大矩阵)
    最大xor路径(poj3764)
    poj2689
    求n!末尾0的个数
    BigInteger和BigDecimal的基本用法
    大数乘法
  • 原文地址:https://www.cnblogs.com/purinliang/p/14265133.html
Copyright © 2020-2023  润新知