zoukankan      html  css  js  c++  java
  • hdu2888 二维ST表(RMQ)

    二维RMQ其实和一维差不太多,但是dp时要用四维

    /*
    二维rmq
    */
    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<cmath>
    using namespace std;
    #define maxn 305
    int val[maxn][maxn],n,m;
    int dpmax[maxn][maxn][9][9];
    void ST(){
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++) dpmax[i][j][0][0]=val[i][j];
        int k1=log2(n),k2=log2(m);
        for(int i=0;i<=k1;i++)//横向
            for(int j=0;j<=k2;j++){//纵向
                if(i==0 && j==0) continue;
                for(int r=1;r+(1<<i)-1<=n;r++)
                    for(int c=1;c+(1<<j)-1<=m;c++)
                        if(i==0) dpmax[r][c][i][j]=max(dpmax[r][c][i][j-1],dpmax[r][c+(1<<(j-1))][i][j-1]);
                        else dpmax[r][c][i][j]=max(dpmax[r][c][i-1][j],dpmax[r+(1<<(i-1))][c][i-1][j]); 
            }
    }
    int query(int r1,int c1,int r2,int c2){
        int kr=log2(r2-r1+1),kc=log2(c2-c1+1);
        int t1=dpmax[r1][c1][kr][kc];
        int t2=dpmax[r2-(1<<kr)+1][c1][kr][kc];
        int t3=dpmax[r1][c2-(1<<kc)+1][kr][kc];
        int t4=dpmax[r2-(1<<kr)+1][c2-(1<<kc)+1][kr][kc];
        return max(max(t1,t2),max(t3,t4));
    }
    int main(){
        int i,j,q;
        int r1,c1,r2,c2;
        while(scanf("%d%d",&n,&m)==2){
            for(int i=1;i<=n;i++)
                for(int j=1;j<=m;j++)
                    scanf("%d",&val[i][j]);
            ST();
            scanf("%d",&q);
            while(q--){
                scanf("%d%d%d%d",&r1,&c1,&r2,&c2);
                int ret=query(r1,c1,r2,c2);
                printf("%d ",ret);
                if(val[r1][c1]==ret||val[r2][c2]==ret||val[r2][c1]==ret||val[r1][c2]==ret)
                    puts("yes");
                else puts("no");
            }
        }
        return 0;
    }
  • 相关阅读:
    python-获取网页源码及保存网页图片到本地实例
    python-随机向文件中写入100个名字实例
    python-计算文件中每个字出现的次数
    python-序列类型
    python-字符串
    python示例1(基本知识巩固)
    python-示例(基本知识巩固)
    [leetcode] Binary Tree Upside Down
    Trie 树
    第K大问题
  • 原文地址:https://www.cnblogs.com/zsben991126/p/10029567.html
Copyright © 2011-2022 走看看