题目:1265. 数星星
思路:这个坐标位置是坐标轴那样子的,然后星星输入的顺序也是Y递增,然后再X递增,也就是说每次判断等级时,只需要算已有的星星里x的值小于当前x的数量即可。用的是线段树
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=32005;
const int mod=100000007;
int n;
int pu[N<<2];
int a[N];
void pushup(int u){
pu[u]=pu[u<<1]+pu[u<<1|1];
}
void update(int u,int l,int r,int x){
if(l>=r){
pu[u]++;
return ;
}
int mid=l+r>>1;
if(x<=mid) update(u<<1,l,mid,x);
else update(u<<1|1,mid+1,r,x);
pushup(u);
}
int query(int u,int l,int r,int x,int y){
if(x<=l&&y>=r){
return pu[u];
}
if(x>r||y<l) return 0;
int ans=0;
int mid=l+r>>1;
ans+=query(u<<1,l,mid,x,y);
ans+=query(u<<1|1,mid+1,r,x,y);
return ans;
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
int x,y;
cin>>x>>y;
a[query(1,0,32000,0,x)]++;
update(1,0,32000,x);
}
for(int i=0;i<n;i++){
cout<<a[i]<<endl;
}
return 0;
}