Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
把我害惨了 原来是排序正错了 要把e从大到小如果相等则s从小到大#include<iostream> #include<algorithm> using namespace std; const int M = 100010; struct dist { int x,y; int pos; }; dist cow[M]; int Max,c[M]; int result[200010]; int cmp(const void *a,const void *b) { dist *p1 = (dist *)a; dist *p2 = (dist *)b; if(p1->y != p2->y) { return(p2->y - p1->y); } return(p1->x - p2->x); } inline int lowbit(int x) { return(x & (-x)); } void update(int pos) { while(pos <= Max + 1) { ++c[pos]; pos += lowbit(pos); } } int sum(int pos) { int i,s = 0; for(i = pos; i > 0; i -= lowbit(i)) { s += c[i]; } return(s); } int main() { int i,j,iN; while(scanf("%d",&iN) && iN) { memset(c,0,sizeof(c)); memset(result,0,sizeof(result)); Max = 0; for(i = 0; i < iN; ++i) { scanf("%d%d",&cow[i].x,&cow[i].y); if(Max < cow[i].x) { Max = cow[i].x; } cow[i].pos = i; } qsort(cow,iN,sizeof(cow[0]),cmp); update(cow[0].x + 1); result[cow[0].pos] = 0; for(i = 1; i < iN; ++i) { if(cow[i].x != cow[i -1].x || cow[i].y != cow[i - 1].y ) //不相等 { result[cow[i].pos] = sum(cow[i].x + 1); } else { result[cow[i].pos] = result[cow[i-1].pos]; } update(cow[i].x + 1); } for(i = 0; i < iN; ++i) { printf("%d ",result[i]); } printf("\n"); } return(0); } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator