Pagini recente » Cod sursa (job #1812131) | Cod sursa (job #3210698) | Cod sursa (job #362817) | Cod sursa (job #478644) | Cod sursa (job #1327369)
#include <algorithm>
#include <iostream>
#include <fstream>
using namespace std;
int v[5005];
vector<int> v2, q, s;
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));
for(int i = 1; i <= N; ++i) {
v[i] = bs(0, v2.size() - 1, v[i]);
}
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];
}
}
//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;
}