Pagini recente » Cod sursa (job #2093075) | Cod sursa (job #1287) | Cod sursa (job #2090481) | Cod sursa (job #2188642) | Cod sursa (job #2180454)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n, a[100005], valori[100005], pozitii[100005], poz,t=0;
int v;
int cautare(int x)
{
int st=1, dr=t, mij;
if (t==0)
return -1;
while (st<=dr)
{
mij=(st+dr)/2;
if (valori[mij]>=x)
{
poz=mij;
dr=mij-1;
}
else
st=mij+1;
}
if (st==t+1)
return -1;
return poz;
}
void afisrecursiv(int k, int pozitie)
{
if (k==0)
return;
for (int i=pozitie; i>=1; i--)
{
if (pozitii[i]==k)
{
afisrecursiv(k-1,i-1);
g << a[i] <<' ';
return;
}
}
}
int main()
{
f >> n;
for (int i=1; i<=n; i++)
{
f >> a[i];
v=cautare(a[i]);
if(v==-1)
{
valori[++t]=a[i];
pozitii[i]=t;
}
else
{
valori[v]=a[i];
pozitii[i]=v;
}
}
g << t<<endl;
afisrecursiv(t,n);
return 0;
}