Pagini recente » Cod sursa (job #1205069) | Cod sursa (job #493305) | pre_oni_gim2015 | Cod sursa (job #2892993) | Cod sursa (job #2650223)
//
// main.cpp
// secv
//
// Created by Eusebiu Rares on 17/09/2020.
// Copyright © 2020 Eusebiu Rares. All rights reserved.
//
#include <iostream>
#include "fstream"
#include "unordered_map"
#include "vector"
#include "algorithm"
std::fstream input ("secv.in", std::ios::in) ;
std::fstream output ("secv.out", std::ios::out) ;
const int MV = 5000 ;
int v[MV + 1], last ;
void normalise(int n) {
std::vector<int> temp(n + 1) ;
std::unordered_map<int, int> resp ;
for (int i = 1 ; i <= n ; ++ i) {
temp[i] = v[i] ;
}
std::sort(begin(temp), end(temp)) ;
int var(1) ;
for (int i = 1 ; i <= n ; ++ i) {
if (temp[i] != temp[i - 1]) {
resp[temp[i]] = var ++ ;
}
}
last = var - 1 ;
for (int i = 1 ; i <= n ; ++ i) {
v[i] = resp[v[i]] ;
}
}
int lastSeen[MV + 1] ;
int startPoint[MV + 1] ;
int main(int argc, const char * argv[]) {
int n ; input >> n ;
for (int i = 1 ; i <= n ; ++ i) {
input >> v[i] ;
}
normalise(n) ;
int ans(1e9) ;
// for (int i = 1 ; i <= n ; ++ i) {
// std::cout << v[i] << ' ' ;
// }
// std::cout << '\n' ;
// std::cout << last << '\n' ;
for (int i = 1 ; i <= n ; ++ i) {
if (v[i] == 1) {
startPoint[i] = i ;
lastSeen[v[i]] = i ;
} else if (v[i] < last){
if (lastSeen[v[i] - 1]) {
startPoint[i] = startPoint[lastSeen[v[i] - 1]] ;
lastSeen[v[i]] = i ;
}
} else {
if (lastSeen[last - 1]) {
startPoint[i] = startPoint[lastSeen[last - 1]] ;
lastSeen[v[i]] = i ;
ans = std::min(ans, i - startPoint[i] + 1) ;
// std::cout << startPoint[i] << ' ' << i << '\n' ;
}
}
}
if (ans == 1e9) {
ans = -1 ;
}
output << ans ;
}