Pagini recente » Cod sursa (job #701796) | Cod sursa (job #2160124) | Cod sursa (job #324987) | Cod sursa (job #2651702) | Cod sursa (job #826983)
Cod sursa(job #826983)
#include <fstream>
using namespace std;
#define NMAX 100003
long long n, v[NMAX], maxim, k, d[NMAX],c[NMAX], nr;
void caut(int x,int i)
{
int p, u, m;
d[i]=1;
p = 0; u = nr; m = (p+u)/2;
while (p <= u)
{
if (c[m] < x && c[m+1] >= x)
{
c[m+1]=x;
d[i]=m+1;
return;
}
else if (c[m+1] < x) {p = m + 1; m = (p + u)/2;}
else {u = m - 1; m = (p + u)/2;}
}
c[++nr]=x;
d[i]=nr;
}
int main()
{
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int i,poz,j;
fin>>n;
n++;
nr=1;
for(i=1;i<n;i++) fin>>v[i];
c[1]=v[1];
for(i=2;i<n;i++)
caut(v[i],i);
fout<<nr<<endl;
poz=1;j=nr;
for(i=n-1;i;i--)
{
if(d[i]==nr)
{
c[poz++]=v[i];
// fout<<v[i]<<" ";
nr--;
}
}
nr=j;
for(i=nr;i;i--)
fout<<c[i]<<" ";
}