Pagini recente » Cod sursa (job #1225067) | Cod sursa (job #3201622) | Cod sursa (job #1101353) | Cod sursa (job #2640262) | Cod sursa (job #2295995)
#include <bits/stdc++.h>
#define Nmax 100001
using namespace std;
ifstream f("scmax.in"); ofstream g("scmax.out");
int n,v[Nmax],k,t[Nmax],p[Nmax],pt;
int caut_bin(int x)
{ int st=0,dr=k;
while(st<=dr)
{ int m=(st+dr)/2;
if(v[t[m]]<x && v[t[m+1]]>= x) return m;
else if(v[t[m+1]]<x) st=m+1; else dr = m-1;
}
return k;
}
void afis(int x)
{ if(p[x]) afis(p[x]);
g<<v[x]<<' ';
}
int main()
{ f>> n;
for(int i=1;i<=n;i++) f>>v[i];
t[1]=1;
k=1;
pt=1;
for(int i=2;i<=n;i++)
{ int poz=caut_bin(v[i]);
p[i]=t[poz];
t[poz+1]=i;
if(poz+1>k) {k=poz+1; pt=i;}
}
g<<k<<'\n';
afis(pt);
return 0;
}