Pagini recente » Cod sursa (job #75410) | Cod sursa (job #1481299) | Cod sursa (job #1367525) | Cod sursa (job #109537) | Cod sursa (job #2650259)
//
// 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"
#include "map"
std::fstream input ("secv.in", std::ios::in) ;
std::fstream output ("secv.out", std::ios::out) ;
const int MV = 2000000 ;
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) {
// std::cout << v[i] << ' ' << resp[v[i]] << '\n' ;
v[i] = resp[v[i]] ;
}
}
std::map <int, int> c;
int fr[50005];
int prevPoint[MV + 1] ;
int lastSeen[MV + 1] ;
int sol[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];
if(fr[v[i]] == 0)
{
c[v[i]] ++;
fr[v[i]] = 1;
}
}
int pos = 0;
for(auto it : c)
{
++pos;
fr[it.first] = pos;
}
/*std::cout << '\n' ;
for (int i = 1 ; i <= n ; ++ i) {
std::cout << v[i] << ' ' ;
}
std::cout << '\n' ;*/
int ans(1e9) ;
for (int i = 1 ; i <= n ; ++ i) {
v[i] = fr[v[i]] ;
if (v[i] == 1) {
prevPoint[i] = i ;
} else {
prevPoint[i] = lastSeen[v[i] - 1] ;
}
lastSeen[v[i]] = i ;
}
for (int i = 1 ; i <= n ; ++ i) {
if (prevPoint[i]) {
sol[i] = sol[prevPoint[i]] + (i - prevPoint[i]) ;
} else {
sol[i] = 1e9 ;
}
if (v[i] == c.size()) {
ans = std::min(ans, sol[i]) ;
// std::cout << i - sol[i] << ' ' << i << '\n' ;
}
}
if (ans == 1e9) {
ans = -2 ;
}
output << ans + 1 ;
}