Pagini recente » Cod sursa (job #2152628) | Cod sursa (job #2729130) | Cod sursa (job #2140568) | Cod sursa (job #1006473) | Cod sursa (job #1309051)
//Problema,folosind cautare binara
#include <fstream>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int n,v[100003],best[100003],a[100003],maxim,k,b[100003],nr,i,j,poz;
void det(int i)
{
if(a[i]>0)
det(a[i]);
cout<<v[i]<<" ";
}
int bin(int i)
{
int st,dr,mj;
st=0;
dr=nr;
mj=(st+dr)/2;
while(st<dr)
{
if (v[b[mj]]<i and v[b[mj+1]]>=i)
return mj;
else if(v[b[mj+1]]<i)
st=mj+1,mj=(st+dr)/2;
else
dr=mj-1,mj=(st+dr)/2;
}
return nr;
}
int main()
{
cin>>n;
for(i=1;i<=n;i++)
cin>>v[i];
nr=1;
best[1]=b[1]=1;
b[0]=0;
for(i=2;i<=n;i++)
{
poz=bin(v[i]);
a[i]=b[poz];
best[i]=poz+1;
b[poz+1]=i;
nr=max(nr,poz+1);
}
maxim=0;
poz=0;
for(i=1;i<=n;i++)
if (maxim < best[i])
{
maxim = best[i];
poz = i;
}
cout<<maxim<<"\n";
det(poz);
return 0;
}