HDU -1541-stars

//

题意:给定一些点,求在这点左下方的点的个数;

思路:此题可以用二维树状数组做,但仔细看题,可以得到给出的y是从小到大的,这样,只需对x进行操作,进而转换为在x左边的点有多少个

AC代码:

#include<stdio.h>
#include<string.h>
#define N 32005
int a[N]; int b[N]; int n; int lower_bit(int i) { return i&(-i); } void add(int i,int v) { while(i<=N) {
        a[i]+=v;
        i+=lower_bit(i); } } int sum(int i) { int s=0; while(i>0) {
        s+=a[i];
        i-=lower_bit(i); } return s; } int main() { while(scanf("%d",&n)!=EOF) { int i; int x,y;
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b)); for(i=0;i<n;i++) {
            scanf("%d%d",&x,&y);
            x++;
            b[sum(x)]++;
            add(x,1); } for(i=0;i<n;i++) {
            printf("%d\n",b[i]); } } return 0; }


你可能感兴趣的:(HDU -1541-stars)