Pagini recente » Cod sursa (job #2108983) | Cod sursa (job #1110059) | Cod sursa (job #407433) | Cod sursa (job #1638919) | Cod sursa (job #2148159)
#include<fstream>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int v[100003], l[100003], best[100003], sol[100003];
int nr;
int caut(int x)
{
int mij, st, dr;
st=1;
dr=nr;
while(st<=dr)
{
mij=(st+dr)/2;
if(x<=v[l[mij]]) dr=mij-1;
else st=mij+1;
}
return dr;
}
int main()
{
int n,i,poz,p,k;
nr=1;
in>>n;
for(i=1; i<=n; i++)
in>>v[i];
l[0]=0;
l[1]=1;
for(i=2; i<=n; i++)
{
poz=caut(v[i]);
best[i]=poz+1;
if(poz+1<=nr) { if(v[i]<v[l[poz+1]]) l[poz+1]=i; }
else {nr++; l[nr]=i; }
}
out<<nr<<"\n";
sol[1]=v[l[nr]];
p=nr;
k=1;
for(i=l[nr]-1; i>=1; i--)
{
if(v[i]<sol[k] && best[i]==p-1)
{
k++;
sol[k]=v[i];
p--;
}
}
for(i=nr; i>=1; i--)
out<<sol[i]<<" ";
return 0;
}