Cod sursa(job #1538118)
Utilizator | Istrate Ruxandra ris99 | Data | 28 noiembrie 2015 15:43:45 |
---|---|---|---|
Problema | Subsir crescator maximal | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.53 kb |
#include <fstream>
using namespace std;
long n, a[100003], k, b[100003], m,poz[100003];
ifstream f("scmax.in");
ofstream g("scmax.out");
long caut(long p,long u,long x)
{long m;
while(p<=u)
{m=(p+u)/2;
if(x<a[b[m]]) p=m+1;
else u=m-1;
}
return p;
}
int main()
{ int i;
f>>n;
for(i=1;i<=n;i++)
f>>a[i];
for(i=n;i>=1;i--)
{k=caut(1,m,a[i]);
poz[i]=b[k-1];
if(k>m){b[k]=i;m=k;}
else if(a[i]>a[b[k]]) b[k]=i;
}
g<<m<<endl;
for(i=b[m];i>0;i=poz[i]) g<<a[i]<<' ';
return 0;
}