Cod sursa(job #1585773)

Utilizator claudiuarseneClaudiu Arsene claudiuarsene Data 31 ianuarie 2016 14:31:38
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <cstdio>
#include <set>
#include <algorithm>
using namespace std;

const int maxN = 5000;
const int inf = 1 << 30;
typedef set<int> :: iterator sit;

set<int> uniques;
int v[maxN + 1];
int l[maxN + 1];
int Ans = inf;

int main() {
  freopen("secv.in", "r", stdin);
  freopen("secv.out", "w", stdout);

  int N, n;
  scanf("%d", &N);
  for(int i = 1; i <= N; ++ i) {
    scanf("%d", &v[i]);
    uniques.insert(v[i]);
  }

  n = uniques.size();
  if(n == 1)
    Ans = 1;
  for(int i = 1; i <= N; ++ i) {
    if(v[i] == *uniques.begin()) {
      for(struct{sit a; int b;} j = {++ uniques.begin(), i + 1}; j.a != uniques.end() and j.b <= N; ++ j.b) {
        if(v[j.b] == *j.a) ++ j.a;
        if(j.a == uniques.end())
          Ans = min(Ans, j.b - i + 1);
      }
    }
  }

  printf("%d\n", (Ans == inf) ? -1 : Ans);
  return 0;
}