bzoj 1047: [HAOI2007]理想的正方形【单调队列】
2018-08-02 23:29
381 查看
没有复杂结构甚至不长但是写起来就很想死的代码类型
原理非常简单,就是用先用单调队列处理出mn1[i][j]表示i行的j到j+k-1列的最小值,mx1[i][j]表示i行的j到j+k-1列的最大值
然后就变成求单列最大最小值,用上面同样的方法处理出对于列的mn2mx2即可
#include<iostream> #include<cstdio> using namespace std; const int N=1005; int n,m,k,a ,mn1 ,mx1 ,mn2 ,mx2 ,ans=1e9,q1 ,l1,r1,q2 ,l2,r2; int read() { int r=0,f=1; char p=getchar(); while(p>'9'||p<'0') { if(p=='-') f=-1; p=getchar(); } while(p>='0'&&p<='9') { r=r*10+p-48; p=getchar(); } return r*f; } int main() { n=read(),m=read(),k=read(); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) a[i][j]=read(); for(int i=1;i<=n;i++) { l2=r2=l1=r1=q2[1]=q1[1]=1; for(int j=2;j<=m;j++) { while(a[i][j]>=a[i][q2[r2]]&&l2<=r2) r2--; while(a[i][j]<=a[i][q1[r1]]&&l1<=r1) r1--; q2[++r2]=j;q1[++r1]=j; while(j-q2[l2]>=k) l2++; while(j-q1[l1]>=k) l1++; if(j>=k) mx1[i][j-k+1]=a[i][q2[l2]],mn1[i][j-k+1]=a[i][q1[l1]]; } } for (int j=1;j<=m-k+1;j++) { l2=r2=l1=r1=q2[1]=q1[1]=1; for(int i=2;i<=n;i++) { while(mx1[i][j]>=mx1[q2[r2]][j]&&l2<=r2) r2--; while(mn1[i][j]<=mn1[q1[r1]][j]&&l1<=r1) r1--; q2[++r2]=i;q1[++r1]=i; while(i-q2[l2]>=k) l2++; while(i-q1[l1]>=k) l1++; if(i>=k) mx2[i-k+1][j]=mx1[q2[l2]][j],mn2[i-k+1][j]=mn1[q1[l1]][j]; } } for(int i=1;i<=n-k+1;i++) for(int j=1;j<=m-k+1;j++) ans=min(ans,mx2[i][j]-mn2[i][j]); printf("%d\n",ans); return 0; }
相关文章推荐
- [bzoj1047][HAOI2007]理想的正方形(单调队列)
- 【bzoj1047】【单调队列】【HAOI2007】理想的正方形
- 【bzoj1047】【HAOI2007】【理想的正方形】【单调队列】
- BZOJ 1047 [HAOI2007]理想的正方形 单调队列DP
- bzoj 1047: [HAOI2007]理想的正方形 (单调队列)
- 【BZOJ 1047】 [HAOI2007]理想的正方形 单调队列(也可以dp水)
- BZOJ1047: [HAOI2007]理想的正方形 [单调队列]
- 【BZOJ】1047: [HAOI2007]理想的正方形(单调队列/~二维rmq+树状数组套树状数组)
- BZOJ 1047 [HAOI2007]理想的正方形【单调队列
- BZOJ 1047 [HAOI2007]理想的正方形 - 单调队列
- bzoj1047 [HAOI2007]理想的正方形 单调队列
- BZOJ 1047: [HAOI2007]理想的正方形(单调队列)
- [bzoj1047][HAOI2007]理想的正方形【单调队列】
- bzoj 1047 : [HAOI2007]理想的正方形 单调队列dp
- bzoj1047[HAOI2007]理想的正方形 单调队列
- [BZOJ1047][HAOI2007]理想的正方形(单调队列)
- BZOJ 1047: [HAOI2007]理想的正方形( 单调队列 )
- bzoj 1047 [HAOI2007]理想的正方形 单调队列
- [BZOJ 1047] [HAOI2007] 理想的正方形 【单调队列】
- BZOJ 1047 HAOI2007 理想的正方形 单调队列