// convolve one column of I by a 2rx1 max filter void convMaxY( float *I, float *O, float *T, int h, int r ) { int y, y0, y1, yi, m=2*r+1; #define max1(a,b) a>b ? a : b; #define maxk(y0,y1) { O[y]=I[y0]; \ for( yi=y0+1; yi<=y1; yi++ ) { if(I[yi]>O[y]) O[y]=I[yi]; }} for( y=0; y<r; y++ ) { y1=y+r; if(y1>h-1) y1=h-1; maxk(0,y1); } for( ; y<=h-m-r; y+=m ) { T[m-1] = I[y+r]; for( yi=1; yi<m; yi++ ) T[m-1-yi] = max1( T[m-1-yi+1], I[y+r-yi] ); for( yi=1; yi<m; yi++ ) T[m-1+yi] = max1( T[m-1+yi-1], I[y+r+yi] ); for( yi=0; yi<m; yi++ ) O[y+yi] = max1( T[yi], T[yi+m-1] ); } for( ; y<h-r; y++ ) { maxk(y-r,y+r); } for( ; y<h; y++ ) { y0=y-r; if(y0<0) y0=0; maxk(y0,h-1); } #undef maxk #undef max1 }
int main() { int i, N, A[102]; scanf("%d", &N); for (i = 0; i < N; i++) { scanf("%d", &A[i]); } printf("%d\n", maxk(A, N)); return 0; }