poj2019 二维RMQ裸题

匿名 (未验证) 提交于 2019-12-02 23:49:02
Cornfields
Time Limit: Memory Limit:
Total Submissions:8623 Accepted:

Description





Input





Output

Sample Input

5 3 1 5 1 2 6 3 1 3 5 2 7 7 2 4 6 1 9 9 8 6 5 0 6 9 3 9 1 2 

Sample Output

5C++代码
 1 #include <iostream>  2 #include <cstdio>  3 #include <cstring>  4 #include <cmath>  5 #include <set>  6 #include <vector>  7 #include <map>  8 #include <queue>  9 #include <set> 10 #include <math.h> 11 #include <algorithm> 12 using namespace std; 13 #define MAXN 250 + 5 14 int dp[MAXN][MAXN][20]; 15 int dp1[MAXN][MAXN][20]; 16 int a[MAXN][MAXN]; 17 int n,m; 18 void st(){ 19     for(int i=1;i<=n;i++) 20     for(int k=0;(1<<k)<=m;k++){ 21     for(int j=1;j+(1<<k)-1<=m;j++){ 22         if(k==0){ 23             dp[i][j][k]=dp1[i][j][k]=a[i][j]; 24         } 25         else { 26             dp[i][j][k]=max(dp[i][j][k-1],dp[i][j+(1<<(k-1))][k-1]); 27             dp1[i][j][k]=min(dp1[i][j][k-1],dp1[i][j+(1<<(k-1))][k-1]); 28         } 29     } 30     } 31 } 32 int rmq2dmax(int x,int y,int x1,int y1){ 33     int k=log2(y1-y+1); 34     int mm=max(dp[x][y][k],dp[x][y1-(1<<k)+1][k]); 35     for(int i=x+1;i<=x1;i++) 36         mm=max(mm,max(dp[i][y][k],dp[i][y1-(1<<k)+1][k])); 37     return mm; 38 } 39 int rmq2dmin(int x,int y,int x1,int y1){ 40     int k=log2(y1-y+1); 41     int mm=min(dp1[x][y][k],dp1[x][y1-(1<<k)+1][k]); 42     for(int i=x+1;i<=x1;i++) 43         mm=min(mm,min(dp1[i][y][k],dp1[i][y1-(1<<k)+1][k])); 44     return mm; 45 } 46  47  48 int main(int argc, char const *argv[]) 49 { 50     int b,k; 51     scanf("%d%d%d",&n,&b,&k); 52     m = n; 53     for(int i = 1;i <= n; i++){ 54         for(int j = 1;j <= n ; j++){ 55             scanf("%d",&a[i][j]); 56         } 57     } 58     st(); 59     while(k--){ 60         int p,q; 61         scanf("%d%d",&p,&q); 62         cout << rmq2dmax(p,q,p + b - 1,q + b - 1) - rmq2dmin(p,q,p + b - 1,q + b - 1)<< endl; 63     } 64     return 0; 65 }
二维RMQ

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!