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

    #include<algorithm>
    #include<iostream>
    using namespace std;
    
    int C[32001];//数状数组
    int Out[15001];//输出结果,Out[i]表示level i的星星个数
    int N = 32001;//星星个数
    
    //C[i] = a[i – 2^k + 1] + … + a[i],k为i在二进制下末尾0的个数。
    int Lowbit(int x)
    {
        return x&(x^(x-1));
    }
    
    //修改树状数组,往原数组的i元素加x
    void Modify(int i,int x)
    {
        while(i<=N)
        {
            C[i] += x;
            i += Lowbit(i);
        }
    }
    
    //1..n求和
    int Sum(int n)
    {
        int sum=0;
        while(n>0)
        {
            sum += C[n];
            n -= Lowbit(n);
        }
        return sum;
    }
    
    
    int main()
    {
        int n;
        scanf("%d",&n);
        
        int i;
        int x,y;
        for(i=1;i<=n;++i)
        {
            scanf("%d%d",&x,&y);
            x += 1;
            Modify(x,1);
            Out[Sum(x)-1]++;//因为Sum(x)包括了x,所以Out[Sum(x) - 1] 表示level为Sum(x) - 1的星星的个数
        }
    
        for(i = 0; i < n; ++i)
            printf("%d\n",Out[i]);
        return 0;
    }
    

  • 相关阅读:
    Python_FTP通讯软件
    Python_NAT
    Python_跟随目标主机IP变换
    Python_网络攻击之端口
    spring
    Java多线程总结之线程安全队列Queue
    队列
    路径
    事务的概念
    GBK,UTF-8,和ISO8859-1之间的编码与解码
  • 原文地址:https://www.cnblogs.com/steady/p/1950234.html
Copyright © 2011-2022 走看看