Pagini recente » Cod sursa (job #333700) | Cod sursa (job #614501) | Cod sursa (job #3031030) | Cod sursa (job #1056303) | Cod sursa (job #2567700)
#include <iostream>
#include <fstream>
#define inf 2000000
#define dim 100005
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int dmax,v[dim],d[dim],t[dim],n,i,poz;
int caut(int x)
{
int st=1,dr=dmax;
while(st<=dr)
{
int mid=(st+dr)/2;
if(x<=v[d[mid]])
dr=mid-1;
else
st=mid+1;
}
return st;
}
void sol(int x)
{
if(x==0)
return;
sol(t[x]);
fout<<v[x]<<" ";
}
int main()
{
fin>>n;
fin>>v[1];
dmax=d[1]=1;
for(i=2; i<=n; i++)
{
fin>>v[i];
/// pt v[i] care e cel mai mic nr >= decat v[i]
/// va fi mereu sortat in ordine crescatoare
/// se adauga elementele cele mai mari la final
poz=caut(v[i]);
if(poz>dmax)
dmax++;
d[poz]=i;
t[i]=d[poz-1];
/// nu este sigur ca d-ul este o solutie valida pt ca se fac update uri
}
fout<<dmax<<"\n";
sol(d[dmax]);
}