排序的应用,地址: http://acm.pku.edu.cn/JudgeOnline/problem?id=1828
#include "stdio.h" int num[50005][2]; int qu[50005]; int judge(int a,int b) { int ans=0; int i; for(i=0;i<2;i++) { if(num[qu[a]][i]>num[qu[b]][i]){ans=1;break;} if(num[qu[a]][i]<num[qu[b]][i]){ans=-1;break;} } return ans; } void swap(int a,int b) { int t; t=qu[a]; qu[a]=qu[b]; qu[b]=t; } int partion(int low,int high,int p) { while(low<=high) { if(low<p) { if(judge(low,p)>0){swap(low,p);p=low;} low++; } else { if(high>p) { if(judge(high,p)<0){swap(high,p);p=high;} } high--; } } return p; } void qsort(int left,int right) { int middle; if(left<right) { middle=(left+right)/2; middle=partion(left,right,middle); qsort(left,middle-1); qsort(middle+1,right); } } int main() { int n,i; int count,last; while(1) { scanf("%d",&n); if(n==0)break; for(i=0;i<n;i++){scanf("%d%d",&num[i][0],&num[i][1]);qu[i]=i;} qsort(0,n-1); count=1;last=n-1; for(i=n-2;i>=0;i--) { if(num[qu[i]][0]!=num[qu[i+1]][0]) { if(num[qu[i]][1]>num[qu[last]][1]) { count++; last=i; } } } printf("%d\n",count); } return 0; }
|
|
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
---|
29 | 30 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|
公告
决定从线程开始!!
常用链接
留言簿(6)
随笔档案
搜索
最新评论
阅读排行榜
评论排行榜
|
|