输入居然都帮忙排好序了,把最关键的一步给做了。 线段树,这里我没给节点left,right域,而是在函数递归的时候直接传过去。 #include <iostream> using namespace std; const int maxn=32005; int tree[maxn*8],ans[15000]; int Search(int i,int x,int left=0,int right=maxn) { tree[i]++; if(x==right) return tree[i]-1;//把自己减掉 int mid=(left+right)/2; if(x<=mid) return Search(i*2,x,left,mid); else return tree[i*2]+Search(i*2+1,x,mid+1,right); } int main() { int n,x,y; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d%d",&x,&y); ans[Search(1,x)]++; } for(int i=0;i<n;i++) printf("%d/n",ans[i]); return 0; }