Pagini recente » Cod sursa (job #2950431) | Cod sursa (job #74138) | Cod sursa (job #1645998) | Cod sursa (job #1339648) | Cod sursa (job #1309048)
//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,mj=(st+dr)/2;
else
dr=--mj,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;
}