Pagini recente » Cod sursa (job #2058501) | Cod sursa (job #3248376) | Cod sursa (job #2491249) | Cod sursa (job #2903739) | Cod sursa (job #3139998)
// https://infoarena.ro/problema/secv
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
ifstream fin("secv.in");
ofstream fout("secv.out");
int main() {
int n;
fin>>n;
vector<int> a(n+1), vals;
for (int i=1; i<=n; ++i) {
fin>>a[i];
vals.push_back(a[i]);
}
sort(vals.begin(), vals.end());
vals.erase(unique(vals.begin(), vals.end()), vals.end());
for (int i=1; i<=n; ++i) a[i] = upper_bound(vals.begin(), vals.end(), a[i])-vals.begin();
int k=vals.size();
vector<vector<int>> suf_first(k+2, vector<int>(n+2, n+1));
for (int i=1; i<=k; ++i) {
for (int j=n; j>=1; --j) {
if (a[j] == i) suf_first[i][j] = j;
else suf_first[i][j] = suf_first[i][j+1];
}
}
int minl=n+1;
for (int i=1; i<=n; ++i) {
int first=suf_first[1][i], last=first;
for (int i=2; i<=k; ++i) last = suf_first[i][last];
if (last != n+1) minl = min(minl, last-first+1);
}
if (minl == n+1) fout<<-1;
else fout<<minl;
}