Advertisement
Guest User

Untitled

a guest
Jul 12th, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define DIM 509
  6. #define MODULO 16714589
  7. #define INF 1e18+9
  8.  
  9. long long i,j,k,l,n,m;
  10.  
  11. long long T[4*DIM][4*DIM],a[DIM][DIM];
  12.  
  13. void buildtreey(long long vx,long long xtl,long long xtr,long long vy,long long ytl,long long ytr){
  14.    if(ytl==ytr){
  15.  
  16.        if(xtl==xtr)T[vx][vy]=a[xtl][ytl];
  17.        else T[vx][vy]=min(T[2*vx+1][vy],T[2*vx+2][vy]);
  18.  
  19.        return;
  20.    }
  21.  
  22.    long long tm=(ytl+ytr)/2;
  23.  
  24.    buildtreey(vx,xtl,xtr,2*vy+1,ytl,tm);
  25.    buildtreey(vx,xtl,xtr,2*vy+2,tm+1,ytr);
  26.  
  27.    T[vx][vy]=min(T[vx][2*vy+1],T[vx][2*vy+2]);
  28. }
  29.  
  30. void buildtreex(long long v,long long tl,long long tr){
  31.    if(tl!=tr){
  32.        long long tm=(tl+tr)/2;
  33.        buildtreex(v*2+1,tl,tm);
  34.        buildtreex(v*2+2,tm+1,tr);
  35.    }
  36.    buildtreey(v,tl,tr,0,1,m);
  37. }
  38.  
  39. long long queryy(long long vx,long long vy,long long tl,long long tr,long long L,long long R){
  40.    if(tr<L || R<tl)return INF;
  41.  
  42.    if(L<=tl && tr<=R)return T[vx][vy];
  43.  
  44.    long long tm=(tl+tr)/2;
  45.    return min(queryy(vx,2*vy+1,tl,tm,L,R),queryy(vx,2*vy+2,tm+1,tr,L,R));
  46. }
  47.  
  48. long long query(long long v,long long tl,long long tr,long long Lx,long long Rx,long long Ly,long long Ry){
  49.    if(tr<Lx || Rx<tl)return INF;
  50.  
  51.    if(Lx<=tl && tr<=Rx)return queryy(v,0,1,m,Ly,Ry);
  52.  
  53.    long long tm=(tl+tr)/2;
  54.    return min(query(v*2+1,tl,tm,Lx,Rx,Ly,Ry),query(v*2+2,tm+1,tr,Lx,Rx,Ly,Ry));
  55. }
  56.  
  57. int main()
  58. {
  59.    cin>>n>>m;
  60.    for(i=1;i<=n;i++){
  61.        for(j=1;j<=m;j++){
  62.            cin>>a[i][j];
  63.        }
  64.    }
  65.  
  66.    buildtreex(0,1,n);
  67.  
  68.    int nt,x1,x2,m1,m2;
  69.    cin>>nt;
  70.    for(i=1;i<=nt;i++){
  71.        cin>>x1>>m1>>x2>>m2;
  72.        cout<<query(0,1,n,x1,m1,x2,m2)<<endl;
  73.    }
  74.  
  75.    return 0;
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement