#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> P;
vector<P> q;
const int N = 3e5+10;
struct node
{
long long x,y;
}a[N];
int n;
int c[N];
int b[N];
bool com(node a,node b)
{
return a.x<b.x;
}
int lowbit(int x)
{
return x&-x;
}
void updata(int x,int k)
{
while(x<=n)
{
c[x]+=k;
x+=lowbit(x);
}
}
int ask(int x)
{
int ans=0;
while(x)
{
ans+=c[x];
x-=lowbit(x);
}
return ans;
}
int main()
{
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(false);
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i].x>>a[i].y;
b[i]=a[i].y;
q.push_back({a[i].x,a[i].y});
}
sort(a+1,a+1+n,com);
sort(b+1,b+1+n);
map<P,int> k;
for(int i=1;i<=n;i++)
{
long long temp = a[i].y;
int t = upper_bound(b+1,b+1+n,temp) - b - 1;
updata(t,-1);
k[{a[i].x,a[i].y}]=t+ask(t);
}
for(int i=0;i<q.size();i++)
{
cout<<k[q[i]]<<endl;
}
return 0;
}
求区间内小于某个数的元素的个数(树状数组)
最新推荐文章于 2024-07-20 09:51:47 发布