Pagini recente » Cod sursa (job #2050030) | Cod sursa (job #2403183) | Cod sursa (job #2442208) | Cod sursa (job #1085297) | Cod sursa (job #2650235)
//
// 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 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] ;
}
normalise(n) ;
int ans(1e9) ;
for (int i = 1 ; i <= n ; ++ 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] == last) {
ans = std::min(ans, sol[i]) ;
std::cout << i - sol[i] << ' ' << i << '\n' ;
}
}
if (ans == 1e9) {
ans = -1 ;
}
output << ans + 1 ;
}