zoukankan      html  css  js  c++  java
  • POJ 2019

    一道水题,然而A的过程实在曲折,中间WA了几次,MLE几次,RUNTIMEERROR几次,确实有点搞心态。
    这道题总结如下:

    • 卡内存
    • Sparse Table的二维RMQ,一定一定重视细节,必须开始重视代码一次测试的正确率,总是有潜在的bug在实战非常浪费时间
    #include <iostream>
    #include <algorithm>
    #include <queue>
    #include <string>
    #include <vector>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <string>
    #include <stack>
    #include <map>
    #include <set>
    #include <deque>
    using namespace std;
    
    const int maxn= 253;
    
    unsigned char mn[maxn][maxn][9][9], mx[maxn][maxn][9][9];
    int mm[maxn];
    
    void InitRMQ(int n)
    {
    	int ele;
    	for (int i= 1; i<= n; ++i){
    		for (int j= 1; j<= n; ++j){
    			scanf("%d", &ele);
    			mn[i][j][0][0]= mx[i][j][0][0]= ele;
    		}
    	}
    	for (int ii= 0; ii<= mm[n]; ++ii){
    		for (int jj= 0; jj<= mm[n]; ++jj){
    			if (!ii && !jj){
    				continue;
    			}
    			for (int i= 1; i+(1<<ii)-1<= n; ++i){
    				for (int j= 1; j+(1<<jj)-1<= n; ++j){
    					if (ii){
    						mn[i][j][ii][jj]= min(mn[i][j][ii-1][jj], mn[i+(1<<(ii-1))][j][ii-1][jj]);
    						mx[i][j][ii][jj]= max(mx[i][j][ii-1][jj], mx[i+(1<<(ii-1))][j][ii-1][jj]);
    					}
    					else{
    						mn[i][j][ii][jj]= min(mn[i][j][ii][jj-1], mn[i][j+(1<<(jj-1))][ii][jj-1]);
    						mx[i][j][ii][jj]= max(mx[i][j][ii][jj-1], mx[i][j+(1<<(jj-1))][ii][jj-1]);
    					}
    				}
    			}
    		}
    	}
    }
    inline int Query(int x, int y, int b)
    {
    	int k= mm[b];
    	int x1= x+b-(1<<k), y1= y+b-(1<<k);
    	int v_mx, v_mn;
    	v_mx= max(max(mx[x][y][k][k], mx[x1][y][k][k]), max(mx[x][y1][k][k], mx[x1][y1][k][k]));
    	v_mn= min(min(mn[x][y][k][k], mn[x1][y][k][k]), min(mn[x][y1][k][k], mn[x1][y1][k][k]));
    
    	return v_mx-v_mn;
    }
    
    int main(int argc, char const *argv[])
    {
    	int n, b, k;
    	scanf("%d %d %d", &n, &b, &k);
    
    	mm[0]= -1;
    	for (int i= 1; i<= n; ++i){
    		mm[i]= i & (i-1) ? mm[i-1] : mm[i-1]+1;
    	}
    	InitRMQ(n);
    
    	while (k--){
    		int l, r;
    		scanf("%d %d", &l, &r);
    		printf("%d
    ", Query(l, r, b));
    	}
    	return 0;
    }
    
  • 相关阅读:
    mysql 分页查询的优化
    将某盘下所有文件名存在一个文件下面
    java 时间处理经典案例
    完整的发邮件并且生成测试报告的例子
    python 定时任务的执行
    打飞机游戏第一天,诸神归位
    数据库中插入几百万条数据
    面向对象的总结
    Python关于文件操作的总结
    python自动化,自动登录并且添加一个门店
  • 原文地址:https://www.cnblogs.com/Idi0t-N3/p/14769750.html
Copyright © 2011-2022 走看看