Cod sursa(job #2152499)

Utilizator AlexandruLuchianov1Alex Luchianov AlexandruLuchianov1 Data 5 martie 2018 16:44:16
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <map>

using namespace std;

ifstream in ("secv.in");
ofstream out ("secv.out");
int const nmax = 5000;
int dp[5 + nmax];
int v[5 + nmax];
int v2[5 + nmax];
map<int , int> realpos;

int main() {
  int n;
  in>>n;
  int smin = 5 + nmax , smax = 0;
  for(int i = 1 ; i <= n ;i++){
    in>>v[i];
    v2[i] = v[i];
    dp[i] = -1;
    if(smax < v[i])
      smax = v[i];
  }
  v2[0] = -1;
  realpos[-1] = 0;
  sort(v2 + 1 ,v2 + n + 1);
  for(int i = 1 ; i <= n ;i++){
    if(v2[i - 1] != v2[i]){
      realpos[v2[i]] = realpos[v2[i - 1]] + 1;
    }
  }
  for(int i = 1 ; i <= n ;i++){
    int pos = realpos[v[i]];
    if(pos == 1)
      dp[pos] = i;
    else{
      if(0 < dp[pos - 1])
        dp[pos] = dp[pos - 1];
      else
        dp[pos] = -1;
    }
    if(0 < dp[pos] && (i - dp[pos] + 1) < smin && v[i] == smax){
      smin = (i - dp[pos] + 1);
    }
  }
  if(smin == 5 + nmax)
    out<<-1;
  else
    out<<smin;
  return 0;
}