Pagini recente » Cod sursa (job #379459) | Cod sursa (job #2490451) | Borderou de evaluare (job #2243377) | Cod sursa (job #57602) | Cod sursa (job #1142060)
#include <fstream>
#define inf 2000000000
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int v[100001],p[100001],q[100001],MIN,n,i,j,x,st,dr,sol,mij,l,poz,k;
int main()
{
f>>n>>v[1];
p[1]=1;
q[1]=v[1];
q[0]=1;
for(i=2;i<=n;i++){
f>>v[i];
st=1;
dr=q[0];
sol=0;
while(st<=dr){
mij=(st+dr)/2;
if(q[mij]>=v[i]){
sol=mij;
dr=mij-1;
}
else
st=mij+1;
}
if(sol!=0){
q[mij]=v[i];
p[i]=mij;
}
else
{
q[0]++;
q[q[0]]=v[i];
p[i]=q[0];
}
}
g<<q[0]<<'\n';
l=q[0];poz=n;
for(i=poz;i>=1&&l>0;i--)
if(p[i]==l)
{
q[++k]=i;
l--;
poz=i-1;
}
for(i=k;i>=1;i--)
g<<v[q[i]]<<" ";
return 0;
}