Pagini recente » Cod sursa (job #676024) | Cod sursa (job #2638827) | Cod sursa (job #1902365) | Cod sursa (job #2698253) | Cod sursa (job #607146)
Cod sursa(job #607146)
#include<fstream>
#include<set>
using namespace std;
const short nmax=5005;
int a[nmax];
short b[nmax],l[nmax],n,k;
set<short> s[nmax],generala,aux;
set<short>::iterator it;
int main(void){
ifstream fin("secv.in");
ofstream fout("secv.out");
short i,j,max,poz,q;
fin>>n;
for(i=1;i<=n;++i){
fin>>a[i]; generala.insert(a[i]); }
k=generala.size();
b[n]=1; l[n]=0;
for(i=1;i<=n;++i)s[i].insert(a[i]);
for(i=n-1;i>=1;--i){
max=0; aux.clear(); q=0;
for(j=i+1;j<=n;++j)
if(a[i]<a[j] && max<b[j] && s[i].count(a[j])==0)
{ max=b[j]; aux.insert(a[j]); q=j;}
b[i]=max+1; l[i]=q;
for(it=aux.begin();it!=aux.end();++it)
s[i].insert(*it);
}
poz=0;
for(i=1;i<=n;++i)if(b[i]==k) { poz=i; break; }
if(poz==0)fout<<"-1";
else{
j=poz; max=0;
while(l[j]>0) { j=l[j]; if(j>max)max=j; }
fout<<max-poz+1;
}
fout.close();
return 0;
}