Pagini recente » Cod sursa (job #2743318) | Cod sursa (job #2004749) | Cod sursa (job #282692) | Cod sursa (job #201351) | Cod sursa (job #602753)
Cod sursa(job #602753)
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n, poz, lmax, L[100003], V[100003], P[100003], maxim, i;
int insereaza(int x, int l, int r)
{
int m=(l+r)/2;
if (l==r)
{
L[r]=x;
if (lmax<r) lmax=r;
return r;
} else
if (x>L[m]) return insereaza(x,m+1,r);
else return insereaza(x,l,m);
}
void afis(int max, int poz)
{
if (poz)
{
if (P[poz]==max) afis(max-1,poz-1), g << V[poz] << ' '; else afis(max, poz-1);
}
}
int main()
{
f >> n;
for (i=1; i<=n; i++) f >> V[i];
lmax=0;
for(i=1; i<=n; i++)
P[i]=insereaza(V[i],1,lmax+1);
maxim=0; poz=0;
for (i=1; i<=n; i++)
if (P[i]>maxim) maxim=P[i], poz=i;
g << maxim << '\n';
afis(maxim,poz);
return 0;
}