Pagini recente » Cod sursa (job #497123) | Cod sursa (job #1319824) | Cod sursa (job #1320953) | Cod sursa (job #1248510) | Cod sursa (job #1327394)
#include <algorithm>
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int v[5005];
vector<int> v2;
int bs(int st, int dr, int val) {
int ans = -1;
while(st <= dr) {
int mid = (st + dr) / 2;
if(val >= v2[mid]) {
ans = mid;
st = mid + 1;
}
else
dr = mid - 1;
}
return ans;
}
int dp[5005];
int ult[5005];
int main()
{
ifstream cin("secv.in");
ofstream cout("secv.out");
int N, x;
cin >> N;
for(int i = 1; i <= N; ++i) {
cin >> v[i];
v2.push_back(v[i]);
}
sort(v2.begin(), v2.end());
/*vector<int> ::iterator itc = unique(v2.begin(), v2.end());
v2.resize(distance(v2.begin(), itc));*/
v2.erase(unique(v2.begin(), v2.end()), v2.end());
for(int i = 1; i <= N; ++i) {
v[i] = lower_bound(v2.begin(), v2.end(), v[i]) - v2.begin();
}
for(int i = 1; i <= N; ++i) {
if(!v[i]) {
dp[0] = 1;
ult[0] = i;
}
else {
if((!dp[v[i]] || dp[v[i]] > i - ult[v[i] - 1] + 1) && dp[v[i] - 1]) {
dp[v[i]] = i - ult[v[i] - 1] + 1;
ult[v[i]] = ult[v[i] - 1];
}
if((!ult[v[i]] || ult[v[i]] > ult[v[i] - 1]) && ult[v[i] - 1])
ult[v[i]] = ult[v[i] - 1];
}
//cout << v[i] << ' ' << dp[v[i]] << ' ' << ult[v[i]] << '\n';
}
if(dp[v2.size() - 1])
cout << dp[v2.size() - 1];
else
cout << -1;
return 0;
}