luogu P2216 [HAOI2007]理想的正方形
时间:2019-10-20
本文章向大家介绍luogu P2216 [HAOI2007]理想的正方形,主要包括luogu P2216 [HAOI2007]理想的正方形使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
二维RMQ问题模板。。。(虽然我用单调队列加一维RMQ过的,,,但这个更方便一些,就再拿出来写写。。跑的还快一点。。)
和一维差不多,只不过需要比较四个区域罢了。。
g[i][j][k]=max(g[i][j][k-1],max(g[i+(1<<(k-1))][j][k-1],max(g[i][j+(1<<(k-1))][k-1],g[i+(1<<(k-1))][j+(1<<(k-1))][k-1])));
额,就是这样。。
上代码。
#include<iostream> #include<cstdio> #include<climits> #include<cmath> using namespace std; int a,b,n,t[1010][1010],g[1050][1050][11],h[1050][1050][11],lg; int ans=INT_MAX; inline int read(){ char c=getchar();int x=0,flag=1; while(c<'0' || c>'9'){if(c=='-') flag=-1;c=getchar();} while(c>='0' && c<='9') x=(x<<1)+(x<<3)+c-'0',c=getchar(); return x*flag; } int main(){ a=read();b=read();n=read(); for(int i=1;i<=a;i++) for(int j=1;j<=b;j++) t[i][j]=read(),g[i][j][0]=h[i][j][0]=t[i][j]; for(int k=1;k<=10;k++){ for(int i=1;i+(1<<k)-1<=a;i++){ for(int j=1;j+(1<<k)-1<=b;j++){ g[i][j][k]=max(g[i][j][k-1],max(g[i+(1<<(k-1))][j][k-1],max(g[i][j+(1<<(k-1))][k-1],g[i+(1<<(k-1))][j+(1<<(k-1))][k-1]))); h[i][j][k]=min(h[i][j][k-1],min(h[i+(1<<(k-1))][j][k-1],min(h[i][j+(1<<(k-1))][k-1],h[i+(1<<(k-1))][j+(1<<(k-1))][k-1]))); } } } lg=log(n)/log(2); for(int i=1;i+n-1<=a;i++){ for(int j=1;j+n-1<=b;j++){ int MAX=max(g[i][j][lg],max(g[i+n-1-(1<<lg)+1][j][lg],max(g[i][j+n-1-(1<<lg)+1][lg],g[i+n-1-(1<<lg)+1][j+n-1-(1<<lg)+1][lg]))); int MIN=min(h[i][j][lg],min(h[i+n-1-(1<<lg)+1][j][lg],min(h[i][j+n-1-(1<<lg)+1][lg],h[i+n-1-(1<<lg)+1][j+n-1-(1<<lg)+1][lg]))); ans=min(ans,MAX-MIN); } } printf("%d\n",ans);return 0; }
原文地址:https://www.cnblogs.com/SyhAKIOI/p/11706753.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 语法糖--JAVA成长之路
- 使用 GitHub Action来托管AutoML软件
- Python爬虫实现自动登录、签到功能 附代码
- Recon-ng被动信息收集框架入门
- 猿实战03——猿首战之手把手教你撸品牌
- 用树莓派DIY波士顿机器狗,帮你省下50万:教程开源,人人皆可上手
- OpenCV绘制箭头线段---函数arrowedLine()使用(C++ Python)
- PyTorch中基于TPU的FastAI多类图像分类
- 【Rust日报】 2020-08-20 Chrome 的 Rust 与 C++ 的互操作性
- 聊聊claudb的DatabaseCleaner
- nc很强大,容易让人蹲号子
- Rust FFI 编程 - Rust导出共享库05
- 详解ENet | CPU可以实时的道路分割网络
- Linux进程调度之 - O(1)调度算法
- 从零开始编写一个WEB服务器 - 基础