在网上搜了一下说是树状树状模板题。。于是果断看了,,但坑爹的英语,,读不懂题意。。。于是用了有道才读懂,题意是让求每个星星的水平,就是每个星星左下方有多少个元素包括自己,有多少就处于第几水平,这一题由于输入时纵坐标是按照升序排列故只考虑横坐标。。就行。。
#include<iostream>
#include<string.h>
#define N 32005
int s[N];
int lev[N];
using namespace std;
int lowbit(int x)
{return x&(-x);}
void update(int x)
{ while(x<N)
{ s[x]++;
x+=lowbit(x);
}
}
int Quary(int x)
{ int sum=0;
while(x>0)
{ sum+=s[x];
x-=lowbit(x);
}
return sum;
}
int main()
{ int n;
while(cin>>n)
{ memset(s,0,sizeof(s));
memset(lev,0,sizeof(lev));
for(int i=0;i<n;++i)
{ int x,y;
cin>>x>>y;
lev[Quary(x+1)]++;//注意树状数组记录从1开始的。。。
update(x+1);
}
for(int i=0;i<n;++i)
cout<<lev[i]<<endl;
}return 0;
}