Pagini recente » Cod sursa (job #1206389) | Cod sursa (job #1602067) | Cod sursa (job #1686337) | Cod sursa (job #2489108) | Cod sursa (job #1306335)
#include <cstdio>
#include <algorithm>
#include <fstream>
#define inf 2000000000
#define nmax 100005
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n,m,sol,v[nmax];
int d[nmax],t[nmax];
int p,u,mid;
void afis(int k)
{if (t[k]>0) afis(t[k]);
g<<v[k]<<' ';
}
int main(){
int i,j;
f>>n;
for (i=1;i<=n;i++) {
f>>v[i];
}
d[1]=1;m=1;
for (i=2;i<=n;i++) {
p=1;
u=m;
sol=0;
while (p<=u) {
mid=(p+u)>>1;
if (v[i]>v[d[mid]]) {
sol=mid;
p=mid+1;
}
else
u=mid-1;
}
if (sol>=m) m++;
d[sol+1]=i;
t[i]=d[sol];
}
g<<m<<'\n';
afis(d[m]);
g<<'\n';
return 0;
}