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;
}