Cod sursa(job #1847528)

Utilizator MiricaMateiMirica Matei MiricaMatei Data 14 ianuarie 2017 18:16:30
Problema Secv Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <cstdio>
#include <algorithm>
using namespace std;
struct Pozitie{
  int nr, poz;
};
bool cmp(Pozitie a, Pozitie b){
  return a.nr < b.nr;
}
Pozitie aux[5005];
int v[5005];
int main(){
  freopen("secv.in", "r", stdin);
  freopen("secv.out", "w", stdout);
  int n, x, k = 0, min1 = (1LL << 31) - 1, i, j;
  scanf("%d", &n);
  for (i = 1; i <= n; ++i){
    scanf("%d", &x);
    aux[i].nr = x;
    aux[i].poz = i;
  }
  sort(aux + 1, aux + n + 1, cmp);
  for (i = 1; i <= n; ++i){
    if (aux[i].nr != aux[i - 1].nr)
      k++;
    v[aux[i].poz] = k;
  }
  for (i = 1; i <= n; ++i)
    if (v[i] == 1){
      int p = 2;
      for (j = i + 1; j <= n && p <= k; ++j){
        if (v[j] == p)
          ++p;
      }
      if (p > k)
        min1 = min(min1, j - i);
    }
  if (min1 == (1LL << 31) - 1)
    min1 = -1;
  printf("%d", min1);
  return 0;
}