Cod sursa(job #1131528)

Utilizator victor_crivatCrivat Victor victor_crivat Data 28 februarie 2014 21:10:51
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <fstream>
using namespace std;
int a[100],i,j,m,n,poz[100],v[100],nmax,w,jmax;
ifstream f("scmax.in");
ofstream g("scmax.out");
int cautare(int x,int st,int dr)
{int mmax=0,imax=0;
    while (st<=dr)
    {if (x<v[(st+dr)/2]) dr=(st+dr)/2-1;
    else {if (v[(st+dr)/2]>mmax){mmax=v[(st+dr)/2];
                               imax=(st+dr)/2;}
         st=(st+dr)/2+1;
         }
    }
         return imax;
}
int main()
{f>>n;
for (i=1;i<=n;i++) f>>a[i];
poz[1]=1;
v[1]=a[1];
nmax=1;
for (i=2;i<=n;i++)
{m=cautare(a[i],1,nmax);
v[m+1]=a[i];
poz[i]=m+1;
if (m+1>nmax) nmax=m+1;
}

for (i=1;i<=n;i++) if (poz[i]>=w) {w=poz[i];jmax=i;}
g<<w<<endl;
v[w]=jmax;
int k=w;
while (w>0)
{jmax--;
if (poz[jmax]==w-1) {v[w-1]=jmax;w--;}
}
for (i=1;i<=k;i++) g<<a[v[i]]<<" ";
g<<'\n';
}