Pagini recente » fmi_bis | Cod sursa (job #853886) | Monitorul de evaluare | Colors | Cod sursa (job #218879)
Cod sursa(job #218879)
#include <stdio.h>
#define NMAX 100010
#define INFI 0x3f3f3f3f
int a[NMAX];
int v[NMAX];
int max;
int n;
int nr;
int bs(int x)
{
if(a[ v[nr] ] < a[x])
{
v[++nr] = x;
v[nr+1] = INFI;
return nr;
}
int m, st = 1, dr = nr;
while(st <= dr)
{
m = (st+dr) >> 1;
if(a[ v[m] ] <= a[x] && a[ v[m+1] ] > a[x])
return m;
else if(a[ v[m] ] > a[x])
dr = m-1;
else
st = m+1;
}
return nr-m+1;
}
int main()
{
freopen("cmlsc.in", "r", stdin);
freopen("cmlsc.out", "w", stdout);
scanf("%d\n", &n);
for(int i = 1; i <= n; ++i)
scanf("%d ", &a[i]);
v[1] = 1;
nr = 1;
v[nr+1] = INFI;
for(int crt, i = 2; i <= n; ++i)
{
crt = bs(i);
if(max < crt)
max = crt;
}
printf("%d\n", max);
return 0;
}