Pagini recente » Cod sursa (job #1720793) | Cod sursa (job #3128459) | Cod sursa (job #2855383) | Cod sursa (job #1961950) | Cod sursa (job #2650238)
//
// 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 p[MV + 1] ;
int f[MV + 1] ;
int dp[MV + 1] ;
int main(int argc, const char * argv[]) {
int n ; input >> n ;
if (n == 1) {
return output << 1, 0 ;
}
for (int i = 1 ; i <= n ; ++ i) {
input >> v[i] ;
}
normalise(n) ;
int ans(1e9) ;
for(int i = 1; i <= n; i ++)
{
if(v[i] == 1)
p[i] = i;
else
p[i] = f[v[i] - 1];
f[v[i]] = i;
}
int mn = (1 << 30);
for(int i = 1; i <= n; i ++)
{
if(p[i] != 0)
dp[i] = dp[p[i]] + i - p[i];
else
dp[i] = (1 << 30);
if(v[i] == last)
mn = std::min(mn, dp[i]);
}
if (ans == 1e9) {
ans = -1 ;
}
output << mn + 1 ;
}