>>244 11番目が255回未満である限り正しく動作する版 (同一回数に対する優先順位が無ければ)
#include<stdio.h>
#include<stdlib.h>
#define CLIP_INC(num, maximum) ((num)>=(maximum)?(maximum):(num)+1)
typedef struct tag_num_cnt_t{
int num, count;
}num_cnt_t;
int cmp(const void *pa, const void *pb){
const num_cnt_t *a=pa, *b=pb;
if(a->count>b->count) return -1;
return (a->count<b->count);
}
void get_top10(num_cnt_t top10[10], const unsigned char count[]){
int i;
for(i=1;i<=10;i++) top10[i-1].count=count[i], top10[i-1].num=i;
for(;i<=2000000;i++){
if(top10[10-1].count<count[i]){
top10[10-1].count=count[i], top10[10-1].num=i;
qsort(top10, 10, sizeof(top10[0]), cmp);
}
}
}
int main(void){
static unsigned char count[2000000+1];
int i, num;
num_cnt_t top10[10];
while(scanf("%d", &num)==1) count[num]=CLIP_INC(count[num], 255);
get_top10(top10, count);
for(i=0;i<10;i++)
if(top10[i].count) printf("%d %d\n", top10[i].num, top10[i].count);
return 0;
}