zoukankan      html  css  js  c++  java
  • 【HDU 1541】 树状数组(入门题)

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

    题目大意: 开始输入一个n(表示有n颗星星)。接下来n行,每行输入一个x,y,代表星星的坐标,注意y是递增输入。求各阶段星星的等级(阶段分为0~n-1)有多少,星星等级数计算方法为本星星左下角的有的星星个数。

     

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 #include <cstring>
     5 using namespace std;
     6 
     7 const int maxn=32050;
     8 int  bit[maxn];
     9 int  level[maxn];
    10 int  n;
    11 
    12 int lowbit(int x)
    13 {
    14     return x&((x)xor(x-1)); //等价于x&(-x)
    15 }
    16 
    17 void add(int x,int val)   //用树状数组对后面节点更新
    18 {
    19     while(x<maxn)
    20     {
    21         bit[x]+=val;
    22         x+=lowbit(x);
    23     }
    24 }
    25 
    26 int sum(int x)
    27 {
    28     int rank=0;   //rank代表星星的等级,即它的左下角有的星星个数
    29     while(x>0)
    30     {
    31         rank+=bit[x];
    32         x-=lowbit(x);
    33     }
    34     return rank;
    35 }
    36 
    37 int main()
    38 {
    39     int   x, y;
    40     while(scanf("%d",&n)!=EOF)
    41     {
    42         memset(bit,0,sizeof(bit));
    43         memset(level,0,sizeof(level));
    44         for(int i=0; i<n; i++)
    45         {
    46             scanf("%d%d",&x,&y);
    47             level[sum(++x)]++;  //此阶段等级加1
    48             add(x,1);
    49         }
    50         for(int i=0; i<n; i++)
    51             printf("%d\n",level[i]);
    52     }
    53     return 0;
    54 }

     

  • 相关阅读:
    C++ Call C# COM
    C ++ / CLI 语法
    C#调用C++ DLL动态库的两种方式
    Linux下的JMeter部署及使用
    同时处理多请求(带超时时间)
    同时处理多请求
    curl命令
    mysql命令
    SpringBoot配置文件敏感信息加密-jasypt
    spring boot升级到2.x的坑
  • 原文地址:https://www.cnblogs.com/kane0526/p/2759493.html
Copyright © 2011-2022 走看看