個人NO。1
一開始題意理解有錯。
一星星左下邊有N顆星星,那它的等級就是N。
一開始理解必須X,Y兩個座標都小於,後來根據範例看了一下只要左下方即可,X,Y座標都小於等於即可,但不包括星星本身。
#include <iostream>#include <stdio.h>#include <string.h>using namespace std;int lowbit(int x){ return x&-x;}int c[32005];int x[32005];int n;int ans[32005];int visit[32005];int a[32005];void add(int x,int y)//後面的所有的值得更新,不包括自身{ while(x<=32005) { c[x]+=y; x+=lowbit(x); }}int sum(int x){ int ret=0; while(x>0) { ret+=c[x]; x-=lowbit(x); } return ret;}int main(){ while(scanf("%d",&n)!=EOF) { memset(c,0,sizeof(c)); memset(x,0,sizeof(x)); memset(ans,0,sizeof(ans)); int x,y; for(int i=1;i<=n;i++) { scanf("%d%d",&a[i],&y); if(visit[a[i]+1]==0) { add(a[i]+2,1); visit[a[i]+1]=1; } else add(a[i]+1,1);//c[i]表示比i座標小的個數 ans[sum(a[i]+1)]++; } for(int i=0;i<n;i++) printf("%d\n",ans[i]); } return 0;}
題目有陷阱就是座標可以輸入0,這對lowbit不適應。
對樹狀數組的用法更瞭解了一下,大致用法如下:balabala....