Pagini recente » Cod sursa (job #2572394) | Cod sursa (job #2983100) | Cod sursa (job #863430) | Cod sursa (job #1767124) | Cod sursa (job #2575538)
#include <fstream>
using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
int n, v[100005], s[100005], nr, poz[100005], ls, ld, mij;
void reconst (int lung, int inc)
{
int i;
if (lung!=0)
{
i=inc;
while (poz[i]!=lung)
{
i--;
}
reconst(lung-1, i-1);
fout<<v[i]<<" ";
}
}
int main()
{
int i;
fin>>n;
for (i=1; i<=n; i++)
{
fin>>v[i];
}
nr=1;
s[1]=v[1];
poz[1]=1;
for (i=2; i<=n; i++)
{
if (v[i]>s[nr])
{
nr++;
s[nr]=v[i];
poz[i]=nr;
}
else
{
ls=1; ld=nr;
while (ls<=ld)
{
mij=(ls+ld)/2;
if (v[i]==s[mij])
{
ls=mij;
ld=mij-1;
}
else
{
if (v[i]>s[mij])
ls=mij+1;
else
ld=mij-1;
}
}
s[ls]=v[i];
poz[i]=ls;
}
}
fout<<nr<<'\n';
reconst(nr, n);
fin.close();
fout.close();
return 0;
}