昨天看到很多ACMER的BLOG都讲的挺详细的,回头看看自己的博客真的好简陋啊,但是我觉得最好的描述还是代码,一个人的代码阅读能力是他整体实力的表现,呵呵。
        2726是一个快排的题目。
#include "stdio.h"
int h[10005][3];
int pc[10005];
void swap(int a,int b)
{
    
int t0,t1,t2;
    t0
=h[a][0];
    t1
=h[a][1];
    t2
=h[a][2];
    h[a][
0]=h[b][0];
    h[a][
1]=h[b][1];
    h[a][
2]=h[b][2];
    h[b][
0]=t0;
    h[b][
1]=t1;
    h[b][
2]=t2;
}

int partion(int low,int high,int p,int m)
{
    
while(low<=high)
    
{
        
if(low<p)
        
{
            
if(h[low][m]>h[p][m]){swap(low,p);p=low;}
            low
++;
        }

        
else
        
{
            
if(high>p)
            
{
                
if(h[high][m]<h[p][m]){swap(high,p);p=high;}
            }

            high
--;
        }

    }

    
return p;
}

void qsort(int left,int right,int m)
{
    
int middle;
    
if(left<right)
    
{
        middle
=(left+right)/2;
        middle
=partion(left,right,middle,m);
        qsort(left,middle
-1,m);
        qsort(middle
+1,right,m);
    }

}

int main()
{
    
int i,n,minc,count;
    
while(1)
    
{
        scanf(
"%d",&n);
        
if(n==0)break;
        
for(i=0;i<n;i++)
        
{
            scanf(
"%d%d",&h[i][0],&h[i][1]);
            h[i][
2]=i;
        }

        qsort(
0,n-1,0);
        minc
=h[0][1];
        count
=0;
        
for(i=0;i<n;i++)pc[i]=0;
        pc[h[
0][2]]=1;
        
for(i=1;i<n;i++)
        
{
            
if(h[i][1]<minc){pc[h[i][2]]=1;minc=h[i][1];}
        }

        qsort(
0,n-1,1);
        minc
=h[0][0];
        
if(pc[h[0][2]]==1){count++;}
        
for(i=1;i<n;i++)
        
{
            
if(h[i][0]<minc)
            
{
                minc
=h[i][0];
                
if(pc[h[i][2]]==1){count++;}
            }

        }

        printf(
"%d\n",count);
    }

    
return 0;
}