Pagini recente » Istoria paginii runda/iiot_simulare | Arhiva de probleme | Cod sursa (job #2149175) | Cod sursa (job #202571) | Cod sursa (job #174798)
Cod sursa(job #174798)
#include<stdio.h>
int n,w[100],a[100],s[100],e;
int lg=0;
void citire()
{
freopen("scmax.in","r",stdin);
scanf("%d", &n);
for (int i=0; i<n; i++)
scanf("%d", &a[i]);
fclose(stdin);
}
void cautare(int st,int dr,int v)
{
int q=(st+dr)/2;
if (st<=dr)
{
if (w[q]==v)
e=q+1;
else if (w[q]<v)
cautare(q+1, dr, v);
else
{
e=q;
cautare (st, q-1, v);
}
}
}
void rezolvare()
{
for (int i=0; i<n; i++)
{
if (lg==0)
{
w[1]=a[i];
++lg;
s[1]=1;
}
else if (a[i]>w[lg])
{
++lg;
w[lg]=a[i];
s[lg]=lg;
}
else
{
cautare(1,lg,a[i]);
w[e]=a[i];
s[i+1]=e;
}
}
}
void afisare()
{
freopen("scmax.out","w",stdout);
printf("%d\n",lg);
int q=lg,e;
/*for (int i=n-1; i>=0; i--)
{
if (q<1)
break;
if (s[i]==q && (a[i-1]<e || q==lg))
{
printf("%d ",a[i-1]);
q--;
e=a[i-1];
}
}*/
for (int i=1; i<=lg; i++)
printf("%d ",w[i]);
}
int main()
{
citire();
rezolvare();
afisare();
return 0;
}