题目链接
直接二维树状数组会超内存,利用贪心排序降维(题目数据已经有序)
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <iostream>
#include <cmath>
#include <vector>
#include <map>
#include <stack>
#include <queue>
#include <set>
using namespace std;
typedef long long ll;
const int INF=0x3f3f3f3f;
const int N=15010;
const int M=32010;
int dx[]={1,-1,0,0};
int dy[]={0,0,1,-1};
struct Node{
int x,y;
}node[N]; //N个节点数
int n,m=32001;
int c[M],ans[M]; //树状数组要超过x的范围
int lowbit(int x){
return x&(-x);
}
void update(int x,int v){
while(x<=m){
c[x]+=v;
x+=lowbit(x);
}
}
int sum(int x){
int res=0;
while(x>0){
res+=c[x];
x-=lowbit(x);
}
return res;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
int a,b;
cin>>a>>b;
a++,b++;
node[i].x=a,node[i].y=b;
}
for(int i=1;i<=n;i++){
int v=sum(node[i].x);
update(node[i].x,1);
ans[v]++;
}
for(int i=0;i<n;i++){
cout<<ans[i]<<endl;
}
}