Cod sursa(job #2912929)

Utilizator euyoTukanul euyo Data 11 iulie 2022 18:12:24
Problema Secv Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin( "secv.in" );
ofstream fout( "secv.out" );

const int MAXN = 5005;

int v[MAXN], w[MAXN], ind[MAXN];

struct cmp {
  bool operator () ( const int &a, const int &b ) {
	return v[a] < v[b];
  }
};

map<int, int> mp;
int nxt[MAXN];

int main() {
  int n;

  fin >> n;
  for ( int i = 1; i <= n; ++i ) {
    fin >> v[i];
    w[i] = v[i];
	ind[i] = i;
  }
  sort( ind + 1, ind + n + 1, cmp() );
  int val = 1;
  v[ind[1]] = val;
  for ( int i = 2; i <= n; ++i ) {
	val += (w[ind[i]] != w[ind[i-1]]);
	v[ind[i]] = val;
  }
  for ( int i = n; i >= 1; --i ) {
	if ( mp.count(v[i] + 1) ) {
	  nxt[i] = mp[v[i] + 1];  
	} else {
	  nxt[i] = -1; 
	}
	mp[v[i]] = i;
  }
  int res = 1e9;
  for ( int i = 1; i <= n; ++i ) {
	if ( v[i] != 1 ) continue;
    int pos = nxt[i], prv = i;
	while ( pos != -1 ) {
	  prv = pos;
	  pos = nxt[pos];
	}
    if ( v[prv] == val ) {
	  res = min(res, prv - i + 1);
	}
  }
  fout << (res == 1e9 ? -1 : res);
  fin.close();
  fout.close();
  return 0;
}