zoukankan      html  css  js  c++  java
  • 树状数组

    对于树状数组,接触蛮长时间了,对它了解深了一点。

    对于一个节点,比如说它的二进制的表达式为:1001011101

    那么如果我要询问1~1001011101这个区间,那么要寻问哪几个节点呢:

        1001011101,1001011100,1001011000,1001010000,1001000000,1000000000

        然后我们还可知道1001011101统计的区间为 1001011101→1001011100

    现在我要去跟新1001011101这个节点,那么假设上限为 1<<10 , 那么需要跟新的节点是什么呢:

        1001011101,1001011110,1001100000,1010000000 , 1100000000 ,1<<10

        然后我们还可以知道1001011101的上级是1001011110

    http://www.cnblogs.com/wuyiqi/archive/2011/12/25/2301071.html

    spfa的板子:

    const int N = 100000 + 5;
    
    struct FenwickTree {
        int *C,n;
        FenwickTree(int size = 0) {
            n = size;
            C = pool + pool_size;
            std::fill(C,C+size,0);
            pool_size += size;
        }
        void modify(int p,int val) {
            for (int i = p; i < n; i += ~i&i+1) C[i] += val;
        }
        int query(int p) {
            int ret = 0;
            for (int i = p; i >= 0; i -= ~i&i+1) ret += C[i];
            return ret;
        }
        int Kth(int K) {
            int p = -1;
            for (int i = 18; i >= 0; -- i) {
                p += 1 << i;
                if (p >= n || C[p] >= K) p -= 1 << i;
                else K -= C[p];
            }
            return p + 1;
        }
    
        static int pool_size;
        static int pool[N];
    };
    int FenwickTree::pool_size;
    int FenwickTree::pool[N];
    

     题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5493

  • 相关阅读:
    《Java技术》第四次作业
    Java第三次作业——面向对象基础(封装)
    《Java技术》第二次作业
    #《Java技术》第一次作业
    Java第十次作业
    Java第九次作业
    Java第八次作业
    Java第七次作业
    Java第6次作业
    Java第五次作业
  • 原文地址:https://www.cnblogs.com/get-an-AC-everyday/p/4550757.html
Copyright © 2011-2022 走看看