Files
C_code/exercise/39.c
T

30 lines
843 B
C

#include <stdio.h>
#include <stdlib.h>
int main(void) {
int n, m;
if (scanf("%d %d", &n, &m) != 2) return 0;
int *a = (int*)malloc((size_t)(n + 1) * sizeof(int));
for (int i = 1; i <= n; ++i) scanf("%d", &a[i]);
int *cnt = (int*)calloc((size_t)(m + 1), sizeof(int));
int covered = 0;
int l = 1;
int best_l = 1, best_r = n;
int best_len = n;
for (int r = 1; r <= n; ++r) {
int c = a[r];
if (cnt[c] == 0) ++covered;
++cnt[c];
if (covered == m) {
while (cnt[a[l]] > 1) { --cnt[a[l]]; ++l; }
int len = r - l + 1;
if (len < best_len || (len == best_len && l < best_l)) {
best_len = len; best_l = l; best_r = r;
}
}
}
printf("%d %d\n", best_l, best_r);
free(cnt);
free(a);
return 0;
}