https://vjudge.net/problem/POJ-2352
确定星星的等级
就是他左下方星星的数目
又因为星星本来就是从左下到右上输出的。。。
所以直接搞就好。
其实就是输入一个数
求之前小于等于这个数的数量x
然后a[x]++;
然后统计a[x];
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
const int maxn=35002;
const int N=35002;
using namespace std;
/*确定星星的等级。
就是他左下方星星的数目。
*/
int n;
int c[maxn];
int sum[maxn];
int a[maxn];
int lowbit(int x){
return x&(-x);
}
int update(int x){
while(x<=N){
c[x]++;
x+=lowbit(x);
}
}
int getsum(int t){
int ans=0;
int x=t;
while(x>0){
ans+=c[x];
x-=lowbit(x);
}//得到小于等于x的数的和
return ans;
}
int main()
{ int m;
int b;
while(~scanf("%d",&m)&&m)
{memset(c,0,sizeof(c));
memset(sum,0,sizeof(sum));
for(int i=1;i<=m;i++){
scanf("%d%d",&a[i],&b);
a[i]++;
sum[getsum(a[i])]++;
update(a[i]);
//sum[getsum(a[i])-1]++;
}
for(int i=0;i<m;i++){
printf("%d\n",sum[i]);
}
}
return 0;
}