Pagini recente » Cod sursa (job #1907487) | Cod sursa (job #247239) | Cod sursa (job #2884440) | Cod sursa (job #1185226) | Cod sursa (job #218942)
Cod sursa(job #218942)
#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)
{
int m, st = 1, dr = nr+1;
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])
st = m+1;
else
dr = m-1;
}
//for(int i = 1; i <= nr; ++i)
// printf("%d ", v[i]); printf("\n");
return m;
}
int main()
{
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
scanf("%d\n", &n);
for(int i = 1; i <= n; ++i)
scanf("%d ", &a[i]);
a[0] = INFI;
v[1] = 1;
nr = 1;
for(int crt, i = 2; i <= n; ++i)
{
crt = bs(i);
//printf("m = %d\n", crt); continue;
if(a[ v[crt] ] == INFI)
++nr;
v[crt] = i;
}
printf("%d\n", nr);
return 0;
}