Pagini recente » Cod sursa (job #60595) | Cod sursa (job #1414816) | Cod sursa (job #1959239) | Cod sursa (job #906841) | Cod sursa (job #2028012)
#include <fstream>
#define in "scmax.in"
#define out"scmax.out"
#define N 100003
using namespace std;
ifstream fin(in);
ofstream fout(out);
int n,v[N],ant[N],s[N];// ant- pozitia elementului anterior, s- pozitia elementului din s
int ns;
inline int BS(int X)
{
int st,dr,mij;
st = 1;
dr = ns;
while(st<=dr)
{
mij = (st+dr)/2;
if(X <= v[s[mij]])
dr = mij-1;
else st = mij+1;
}
return st;
}
inline void afis(int nod)
{
if(nod!=0)
{
afis(ant[nod]);
fout<<v[nod]<<" ";
}
}
void SCLM()
{
int poz;
for(int i=1; i<=n; ++i)
{
poz = BS(v[i]);
ns = max(ns,poz);
s[poz] = i;
ant[i] = s[poz-1];
}
fout<<ns<<"\n";
afis(s[ns]);
}
int main()
{
fin>>n;
for(int i=1; i<=n; ++i)
fin>>v[i];
SCLM();
fin.close(); fout.close();
return 0;
}