Pagini recente » Cod sursa (job #2573940) | Cod sursa (job #1551666) | Istoria paginii runda/sdsa/clasament | Cod sursa (job #2002380) | Cod sursa (job #863456)
Cod sursa(job #863456)
#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];
while (p <= u)
{
m = (p+u)/2;
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==q[0])
{
q[0]++;
q[p+1]=v[i];
}
else
{
q[p+1]=v[i];
}
a[i]=p+1;
if (a[i]>mx) mx=a[i];
}
fprintf(g,"%d",mx);
fclose(g);
return 0;
}