Mai intai trebuie sa te autentifici.
Cod sursa(job #3220553)
| Utilizator | Data | 4 aprilie 2024 08:28:26 | |
|---|---|---|---|
| Problema | Secv | Scor | 100 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva de probleme | Marime | 1.2 kb |
#include <fstream>
#include <unordered_set>
using namespace std;
ifstream in("secv.in");
ofstream out("secv.out");
int n, distincte;
int ans;
int v[5005];
pair<int, int> dp[5005];
unordered_set<int> s;
int main()
{
in>>n;
for(int i = 1; i<=n; i++)
{
in>>v[i];
s.insert(v[i]);
}
distincte = s.size();
for(int i = 1; i<=n; i++)
{
dp[i] = {1, 0};
for(int j = 1; j<i; j++)
{
if(v[j] < v[i])
{
if(dp[j].first + 1 >= dp[i].first)
{
dp[i].first = dp[j].first + 1;
dp[i].second = j;
}
}
}
}
ans = (1 << 30);
for(int i = 1; i<=n; i++)
{
//out<<dp[i].first<<" "<<dp[i].second<<'\n';
if(dp[i].first == distincte)
{
int poz = i;
while(dp[poz].second != 0)
{
poz = dp[poz].second;
}
ans = min(ans, i - poz + 1);
}
}
if(ans == (1 << 30))
{
out<<-1;
}
else
{
out<<ans;
}
return 0;
}
