Pagini recente » Cod sursa (job #343100) | Cod sursa (job #2537039) | Cod sursa (job #698486) | Cod sursa (job #1525713) | Cod sursa (job #721293)
Cod sursa(job #721293)
#include <fstream>
#include <algorithm>
#define NMAx 5100
using namespace std;
int N,Nr,A[NMAx],B[NMAx],Best[NMAx],T[NMAx];
inline int Length(int i) {
if(Best[i]==1)
return 1;
else
return Length(T[i])+i-T[i];
}
void Solve() {
int i,j;
for(i=1;i<=N;i++) {
Best[i]=1;
T[i]=i;
for(j=i-1;j>=1;j--)
if(A[j]<A[i]) {
if(Best[j]+1>Best[i]) {
Best[i]=Best[j]+1;
T[i]=T[j];
}
else
if(Best[j]+1==Best[i]&&T[i]<T[j])
T[i]=T[j];
}
}
}
void Normalizare() {
int i;
sort(B+1,B+N+1);
for(i=1;i<=N;i++)
if(B[Nr]!=B[i])
B[++Nr]=B[i];
}
void Citire() {
ifstream in("secv.in");
in>>N;
for(int i=1;i<=N;i++) {
in>>A[i];
B[i]=A[i];
}
in.close();
}
void Afis() {
int i,Sol;
Sol=NMAx;
for(i=1;i<=N;i++)
if(Best[i]==Nr)
if(Length(i)<Sol)
Sol=Length(i);
if(Sol==NMAx)
Sol=-1;
ofstream out("secv.out");
out<<Sol<<'\n';
out.close();
}
int main() {
Citire();
Normalizare();
Solve();
Afis();
return 0;
}