Pagini recente » Cod sursa (job #852577) | Cod sursa (job #2420458) | Borderou de evaluare (job #1579427) | Cod sursa (job #495309) | Cod sursa (job #3220553)
#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;
}