NonWhite

Live Archive 4478

Jul 12th, 2012
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.64 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <string>
  4. #include <cstring>
  5. #include <vector>
  6. #include <set>
  7. #include <map>
  8. #include <algorithm>
  9. #define FOR(i,A) for(typeof A.begin() i = A.begin() ; i != A.end() ; i++)
  10. #define all( v ) v.begin() , v.end()
  11. #define rall( v ) v.rbegin() , v.rend()
  12. #define clr( x , y ) memset( x , y , sizeof x )
  13. #define mp make_pair
  14. #define debug(x) cout << #x << " = " << x << endl
  15. #define TAM 1010
  16.  
  17. using namespace std ;
  18.  
  19. typedef pair<int,int> ii ;
  20. typedef pair<int,ii> pii ;
  21. typedef long long ll ;
  22.  
  23. int inf , sup ;
  24. int n , m ;
  25. int v[ TAM ][ TAM ] ;
  26.  
  27. int lado( int x , int y ){
  28.     int izq = 0 , der = min( n - x , m - y ) - 1 ;
  29.  
  30.     while( izq <= der ){
  31.         int diag = ( izq + der ) / 2 ;
  32.         if( v[ x + diag ][ y + diag ] > sup )
  33.             der = diag - 1 ;
  34.         else
  35.             izq = diag + 1 ;
  36.     }
  37.     return izq ;
  38. }
  39.  
  40. int pos( int x ){
  41.     int *id =(int *) lower_bound( v[ x ] , v[ x ] + m , inf );
  42.     if ( id == NULL ) return -1;
  43.     return id - v[ x ] ;
  44. }
  45.  
  46. int main(){
  47.  
  48.     while( scanf("%d%d" , &n , &m ) == 2 ){
  49.         if( n == m && m == 0 ) break ;
  50.  
  51.         for(int i = 0 ; i < n ; i++) for(int j = 0 ; j < m ; j++) scanf("%d" , &v[ i ][ j ] ) ;
  52.  
  53.         int q ;
  54.         scanf("%d" , &q ) ;
  55.         for(int k = 0 ; k < q ; k++){
  56.             scanf("%d%d" , &inf , &sup ) ;
  57.             int mx = 0 ;
  58.             for(int i = 0 ; i < n ; i++){
  59.                 int j = pos( i ) ;
  60.                 if( j < 0 ) break ;
  61.                 mx = max( mx , lado( i , j ) ) ;
  62.             }
  63.             printf("%d\n" , mx ) ;
  64.         }
  65.         printf("-\n" ) ;
  66.     }
  67.     return 0 ;
  68. }
Add Comment
Please, Sign In to add comment