Pagini recente » Rating Cristea Liviu (cristea_liviu) | Cod sursa (job #1554035) | Cod sursa (job #2880699) | Cod sursa (job #1870659) | Cod sursa (job #1997633)
#include <iostream>
#include <fstream>
#define N 5010
using namespace std;
ifstream f("subsir2.in");
ofstream g("subsir2.out");
int i,j,n,m,k,x[N],v[N],p[N],b[N],lo,hi,mi,L,t=1000010,min1=1000010;
void af(int k)
{
if(k==0){
g<<L<<'\n';
return;
}
af(b[k]);
g<<k<<' ';
}
int main()
{
f>>n;
int ok=0;
int pozm=1,pozm2=n+10;
for(i=1;i<=n;i++)
{
f>>x[i];
if(min1>x[i])
{
min1=x[i];
pozm=i;
}
}
for(i=pozm+1;i<=n;i++)
{
if(x[i]>min1)
{
if(x[i]<t)
{
t=x[i];
pozm2=i;
}
}
}
v[1]=x[pozm];
p[1]=pozm;
b[pozm]=0;
if(pozm2<=n){
v[2]=x[pozm2];
p[2]=pozm2;
b[pozm2]=p[1];
L=2;
}
else
L=1;
for(i=pozm2+1;i<=n;i++)
{
lo=0;
hi=L+1;
while(hi-lo>1)
{
mi=(lo+hi)/2;
if(x[i]<v[mi])
hi=mi;
else
lo=mi;
}
if(hi==L+1)
L++;
v[hi]=x[i];
p[hi]=i;
b[i]=p[lo];
}
af(p[L]);
return 0;
}