Problem:
Set

数列a_1,a_2,..,a_Nが与えられます。

この数列に値は何種類ありますか。

入力

N
a_1 a_2...a_N

出力

数列の値の種類数を出力せよ。

制約

1 \leq N \leq 10^5

1 \leq a_i \leq 10^9

入力例

6
8 6 9 1 2 1

出力例

5

Solution in C (judge verdict: Accepted)

#include <stdio.h>
#include <stdlib.h>

int asumikana(const void* x, const void* y) {
	int a = *(const int*)x, b = *(const int*)y;
	return a < b ? -1 : a > b;
}

int N;
int a[114514];

int main(void) {
	int i;
	int sumipe;
	if (scanf("%d", &N) != 1) return 1;
	for (i = 0; i < N; i++) {
		if (scanf("%d", &a[i]) != 1) return 1;
	}
	qsort(a, N, sizeof(*a), asumikana);
	sumipe = 1;
	for (i = 1; i < N; i++) {
		if (a[i - 1] != a[i]) sumipe++;
	}
	printf("%d\n", sumipe);
	return 0;
}