hdu 1541 Starts

来源:互联网 发布:淘宝特色馆是干什么的 编辑:程序博客网 时间:2024/06/05 15:56
   简单的树状数组题,题意:统计这个star左下角star的个数,
就是这个star的level。现在要你总计图中level从0到N-1的star
分别有多少个?因为数据是输入的坐标是按Y的升序、如果Y相等,
则按X的升序。所以我们发现我们可以完全忽略Y,只要统计小于

本身X的star个数,就是level了. 


#include<stdio.h>#include<string.h>int c[32002],val[15011];void update(int k,int dir)//改变第K项的值{while(k<32002){c[k]+=dir;k+=k&(-k);//从C[k]往根节点一路上溯}}int sum(int k){int sm=0;while(k>0){sm=sm+c[k];k-=k&(-k);//从C[k]往根节点一路下溯}return sm;}int main(){int i,j,n,y;while(scanf("%d",&n)!=EOF){memset(c,0,sizeof(c));memset(val,0,sizeof(val));for(i=1;i<=n;i++){scanf("%d%d",&j,&y);j++;//树状数组是从1开始的,坐标可能为0;            val[sum(j)]++;update(j,1);}for(i=0;i<n;i++)printf("%d\n",val[i]);}return 0;}


原创粉丝点击