[BZOJ1047][HAOI2007]理想的正方形
2015-07-30 20:04
411 查看
原题地址
二维滑动窗口.
我竟然脑洞大开用倍增A了囧
AC code:
二维滑动窗口.
我竟然脑洞大开用倍增A了囧
AC code:
#include <cstdio> #include <algorithm> #include <cmath> using namespace std; const int N=1010; const int LOGN=11; int a,b,n,ans=2147483647; int lg2 ,two[LOGN]={1}; int M ; int fmi [LOGN],fmx [LOGN]; int main(){ scanf("%d%d%d",&a,&b,&n); for(int i=1;i<=n;i++) lg2[i]=(int)log2(i); for(int i=1;i<LOGN;i++) two[i]=two[i-1]<<1; for(int i=1;i<=a;i++){ for(int j=1;j<=b;j++){ scanf("%d",&M[i][j]); fmi[i][j][0]=fmx[i][j][0]=M[i][j]; } } for(int i=1;i<LOGN;i++){ for(int j=1;j+two[i-1]<=a;j++){ for(int k=1;k+two[i-1]<=b;k++){ fmi[j][k][i]=fmi[j][k][i-1]; fmi[j][k][i]=min(fmi[j][k][i],fmi[j+two[i-1]][k][i-1]); fmi[j][k][i]=min(fmi[j][k][i],fmi[j][k+two[i-1]][i-1]); fmi[j][k][i]=min(fmi[j][k][i],fmi[j+two[i-1]][k+two[i-1]][i-1]); fmx[j][k][i]=fmx[j][k][i-1]; fmx[j][k][i]=max(fmx[j][k][i],fmx[j+two[i-1]][k][i-1]); fmx[j][k][i]=max(fmx[j][k][i],fmx[j][k+two[i-1]][i-1]); fmx[j][k][i]=max(fmx[j][k][i],fmx[j+two[i-1]][k+two[i-1]][i-1]); } } } int d=two[lg2 ]; for(int i=1;i+n-1<=a;i++){ for(int j=1;j+n-1<=b;j++){ int mi=fmi[i][j][lg2 ],mx=fmx[i][j][lg2 ]; mi=min(mi,min(fmi[i+n-d][j][lg2 ],min(fmi[i][j+n-d][lg2 ],fmi[i+n-d][j+n-d][lg2 ]))); mx=max(mx,max(fmx[i+n-d][j][lg2 ],max(fmx[i][j+n-d][lg2 ],fmx[i+n-d][j+n-d][lg2 ]))); ans=min(ans,mx-mi); } } printf("%d\n",ans); return 0; }
相关文章推荐
- UNIX 系统家族树的详细历史(图)
- mdpi,hdpi,xhdpi,xxhdpi,xxxhdpi 对应的像素密度
- 记录Uniyt3d Shader的几个用法
- poj 1064 Cable master【二分】
- sgu 463 - Walking around Berhattan
- BAPI_NETWORK_COMP_REMOVE
- REST和RESTFUL的相关概念理解
- HDU-1285-确定比赛名次-拓扑排序(模板)
- hdu 5319 Painter(模拟题)
- php des 对称加解密类
- "Chinese_PRC_CI_AS" 和 "Chinese_PRC_90_CI_AI" 之间的排序规则冲突问题
- super和this的用法
- 链表
- 更新、插入tableview某一行数据或section数据
- 断点调试利器
- OpenCV 关于保存图片
- HDU5328.Problem Killer
- A星算法地图编辑器
- Odoo HRMS应用简介
- SGU 456 Annuity Payment Scheme