Pagini recente » Cod sursa (job #2036742) | Cod sursa (job #2969444) | Rating Andronic Octavian (ando) | Cod sursa (job #235061) | Cod sursa (job #3139997)
// 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 first=suf_first[1][1], last=first;
for (int i=2; i<=k; ++i) last = suf_first[i][last];
if (last == n+1) fout<<-1;
else fout<<last-first+1;
}