Pagini recente » Cod sursa (job #3188484) | Cod sursa (job #1450517) | Cod sursa (job #3291174) | Cod sursa (job #3288406) | Cod sursa (job #3189208)
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n,m,k=1;
const int N=1e5+5;
int v[N],last[N],best[N],p[N];
int _binar(int x)
{
int st=0;int dr=k;
while(st<=dr)
{
int mj=(st+dr)/2;
if(v[last[mj]]<x)
st=mj+1;
else
dr=mj-1;
}
return st-1;
}
void afis(int x)
{
if(x==0)
return;
afis(p[x]);
g<<v[x]<<" ";
}
int main()
{
f>>n;
for(int i=1;i<=n;i++)
f>>v[i];
best[1]=last[1]=1;
last[0]=0;
for(int i=2;i<=n;i++)
{
int poz=_binar(v[i]);
p[i]=last[poz];
best[i]=poz+1;
last[poz+1]=i;
if(k<poz+1) k++;
}
int mx=0,poz;
for(int i=1;i<=n;i++)
if(mx<best[i])
mx=best[i],poz=i;
g<<mx<<'\n';
afis(poz);
return 0;
}