Pagini recente » Cod sursa (job #2362492) | Cod sursa (job #1527554) | Cod sursa (job #203878) | Cod sursa (job #722530) | Cod sursa (job #2158625)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin ("secv.in");
ofstream cout ("secv.out");
const int LIM = 5005;
int n, v[LIM], lg, dp[LIM], tata[LIM];
int main()
{
int tot = 0;
cin >> n;
for(int i = 1; i <= n; ++i)
cin >> v[i];
for(int i = 1; i <= n; ++i)
{
int st = 1, dr = lg, mj;
while(st <= dr)
{
mj = (st + dr)/2;
if(v[i] > v[ dp[mj] ])
st = mj+1;
else
dr = mj-1;
}
tata[i] = dp[st-1];
if(lg < st)
{
lg = st;
dp[lg] = i;
}
else
if(v[i] < v[ dp[st] ] or (v[i] == v[ dp[st] ] and st == 1))
dp[st] = i;
}
int st = dp[lg], dr = dp[lg];
while(tata[st])
st = tata[st];
int dif = 0;
sort(v + 1, v + n+1);
for(int i = 1; i <= n; ++i)
if(v[i] != v[i-1])
dif++;
if(dp[dif] == 0)
cout << -1 << '\n';
else
cout << dr - st + 1 << '\n';
return 0;
}