0
点赞
收藏
分享

微信扫一扫

LOJ10114 数星星(树状数组)

静悠 2022-09-26 阅读 57

地址:​​https://loj.ac/problem/10114​​

 

LOJ10114 数星星(树状数组)_树状数组

LOJ10114 数星星(树状数组)_i++_02

 

     解析:由于坐标是按y递增排序,所以对于一个点来讲,只看之前x小于等于它的就可以了。那么对于输入的每个点,求之前x小于等于它的,就得用树状数组维护。树状数组c[i]表示x=i时,它之前x小于等于它的有几个点。个数就是级数,num[]来记录。x+1防止死循环

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
const int maxn=32001;
int num[maxn];
int c[maxn];
int lowbit(int i)
{
return i&(-i);
}
void update(int x)
{
for(int i=x;i<=maxn;i+=lowbit(i))
c[i]++;
}
int getsum(int x)
{
int sum=0;
for(int i=x;i>0;i-=lowbit(i))
{
sum+=c[i];
}
return sum;
}
int main()
{
int n;
cin>>n;
int x,y;
for(int i=1;i<=n;i++)
{
cin>>x>>y;
x++;
num[getsum(x)]++;
update(x);
}
for(int i=0;i<n;i++)
cout<<num[i]<<endl;
}

 



举报

相关推荐

0 条评论