2009-03-09 00:01:27來源不明

2007 NOIP 提高組 NOIP2007 1.統計數字

 

/************************************************************/

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int num[200000]={0},time[200000]={0};
int Search(int n,int L)
{
   int index=-1, l=0, h=L-1,m;
   do
     {
        m=(l+h)/2;
        if(num[m]<n) l=m+1;
        else if(num[m]>n) h=m-1;
        else index=m;
     }
   while(index==-1&&l<=h);
  
   return index;
}
main()
{
    int N,data,a,b;
    while(scanf("%d",&N)==1)
     {
       int L=0;
        while(N--)
         {
            scanf("%d",&data);           
            int index=Search(data,L);
            if(index!=-1)  time[index]++;
            else
                {
                  for(a=L-1;a>=0;a--)
                     if(num[a]>data)
                        {
                        num[a+1]=num[a],time[a+1]=time[a];
                        }
                     else break;
                  num[a+1]=data;
                  time[a+1]=1;
                  L++;
                }
         }
         for(a=0;a<L;a++)
            printf("%d %d\n",num[a],time[a]);
     }
return 0;
}