Pagini recente » Cod sursa (job #3144930) | Cod sursa (job #2429560) | Cod sursa (job #1495280) | Cod sursa (job #2918329) | Cod sursa (job #863398)
Cod sursa(job #863398)
#include <iostream>
#include <stdio.h>
using namespace std;
FILE *f=fopen("scmax.in","r");
FILE *g=fopen("scmax.out","w");
int q[100005],a[100005],v[100005],mx,mx1,i,j,ok,n,p;
int caut(int x)
{
int p, u, m;
p = 1; u = q[0]; m = (p+u)/2;
while (p <= u)
{
if (q[m] < x && q[m+1] >= x) return m;
else if (q[m+1] < x) {p = m + 1; m = (p + u)/2;}
else {u = m - 1; m = (p + u)/2;}
}
return u;
}
int main()
{
fscanf(f,"%d",&n);
for (i=1;i<=n;i++)
fscanf(f,"%d",&v[i]);
q[1]=v[1];
q[0]=1;
a[1]=1;
for (i=2;i<=n;i++)
{
p=caut(v[i]);
if (p!=0)
{
q[0]=p+1;
q[q[0]]=v[i];
}
else
{
q[0]=1;
q[1]=v[i];
}
a[i]=q[0];
if (a[i]>mx) mx=a[i];
}
fprintf(g,"%d",mx);
fclose(g);
return 0;
}