https://loj.ac/problem/10114
제목 설명
감안 \ (\ N-)는 수평 및 수직 좌표의 점의 수만큼보다 작은 평면 상 스타 등급의 정의에 의해 주어진다 y 좌표의 오름차순으로, 점의 좌표, 각 클래스 별 추구 수.
생각
때문에의 \ (Y \) 좌표가 증가하는 순서로 주어진, 그래서 우리는 고려할 필요가있다 \ (X \) 의 x 좌표 범위가 상대적으로 작기 때문에, 우리가 직접 유지할 수있는 좌표 가로 좌표 적은 \ (I \) 포인트 수는 접두사와 펜윅 트리 유지 관리 할 수 있습니다 할 수 있습니다. 그러나, 배열은 표시된 트리 아래에 유지 될 수 있습니다 (0 \) \ 때문에, 케이스 (\ lowbit (0) = 0 \) 이므로에있을 \ (X 축 + 1 \) .
코드
#include<bits/stdc++.h>
using namespace std;
const int N=32010;
int read()
{
int res=0,w=1;
char ch=getchar();
while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();}
while(isdigit(ch))res=(res<<3)+(res<<1)+(ch^48),ch=getchar();
return res*w;
}
void write(int x)
{
if(x<0){putchar('-');x=-x;}
if(x>9)write(x/10);
putchar(x%10^48);
}
void writeln(int x)
{
write(x);
putchar('\n');
}
int c[N+5],ans[N+5];
void update(int x,int v){for(;x<=N;x+=x&-x)c[x]+=v;}
int query(int x)
{
int res=0;
for(;x;x-=x&-x)res+=c[x];
return res;
}
int main()
{
int n=read();
for(int i=1;i<=n;i++)
{
int x=read()+1,y=read();
int v=query(x);
update(x,1);
ans[v]++;
}
for(int i=0;i<n;i++)
printf("%d\n",ans[i]);
}