【无标题】蓝桥杯备考(倒计时五十二天)——数星星

#include

const int N=32010;

int n;

int tr[N],level[N];

int lowbit(int x)

{

    return x&-x;

}

void add(int x)

{

    for(int i=x;i

    //N为所输入的数值数目的最大值

}

int sum(int x)//求前缀和

{

    int res=0;

    for(int i=x;i;i-=lowbit(i)) res+=tr[i];

    return res;

}

int main()

{

    scanf("%d",&n);

    for(int i=0;i

  {

        int x,y;

        scanf("%d%d",&x,&y);

        x++;//树状数组的下标是从1开始

        add(x);//相当于给树状数组赋初值

        level[sum(x)]++;

       //该星级的总的星星的个数

  }

   for(int i=1;i<=n;i++)

//一开始的0星级,因为是先给树状数组赋值,导致星级统统在原来基础上加一

    {

        printf("%d\n",level[i]);

    }

    return 0;

}

你可能感兴趣的:(蓝桥杯,c语言)