Pagini recente » Cod sursa (job #1538486) | Cod sursa (job #1049107) | Cod sursa (job #140215) | Cod sursa (job #1118191) | Cod sursa (job #1319804)
#include <iostream>
#include<fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n,w[100005],v[100005],dp[100005], sol[100005],i, na;
int cb(int nr)
{
int st,dr,rez;
st=1;
dr=na;
rez=-1;
while(st<=dr)
{
int mij=(st+dr)/2;
if(nr<=dp[mij])
{
dr=mij-1;
rez=mij;
}
else if(nr>dp[mij])
st=mij+1;
}
if(rez==-1)
rez=na+1;
return rez;
}
int main()
{
int dr;
f>>n;
for(i=1; i<=n; i++)
f>>v[i];
dp[1]=v[1];
na=1;
for(i=2; i<=n; i++)
{
int poz= cb(v[i]);
if(poz>na)
{
++na;
}
dp[poz]=v[i];
w[i]=poz;
}
g<<na<<'\n';
w[1]=1;
int lgmax = na;
for(i=n; i>=1; i--)
{
if(w[i]==na)
{
sol[na] = v[i];
--na;
}
}
for (i = 1; i <= lgmax; ++ i)
g << sol[i] << " ";
f.close();
g.close();
return 0;
}