码迷,mamicode.com
首页 > 其他好文 > 详细

[HAOI2007]理想的正方形

时间:2018-07-20 11:27:19      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:make   str   sample   一个   closed   ++i   clip   segment   opened   

技术分享图片
#include <iostream>
#include <string>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <deque>
#include <map>
#define range(i,a,b) for(int i=a;i<=b;++i)
#define LL long long
#define rerange(i,a,b) for(int i=a;i>=b;--i)
#define fill(arr,tmp) memset(arr,tmp,sizeof(arr))
using namespace std;
int a,b,n,tt[1005][1005],gg[1005][1005],mm[2][1005][1005];
pair<int,int>q[1005];
void init(){
    cin>>a>>b>>n;
    range(i,1,a)range(j,1,b)cin>>tt[i][j];
}
void cal(int x){
    range(i,1,a){
        int left=1,right=0;
        range(j,1,b){
            while(left<=right&&j-q[left].second>=n)++left;
            if(!x)while(left<=right&&tt[i][j]>=q[right].first)--right;
            else while(left<=right&&tt[i][j]<=q[right].first)--right;
            q[++right]=make_pair(tt[i][j],j);
            gg[i][j]=q[left].first;
        }
    }
    range(j,n,b){
        int left=1,right=0;
        range(i,1,a){
            while(left<right&&i-q[left].second>=n)++left;
            if(!x)while(left<=right&&gg[i][j]>=q[right].first)--right;
            else while(left<=right&&gg[i][j]<=q[right].first)--right;
            q[++right]=make_pair(gg[i][j],i);
            mm[x][i][j]=q[left].first;
        }
    }
}
void solve(){
    cal(0);cal(1);
    int ans=1<<30;
    range(i,n,a)
    range(j,n,b)ans=min(ans,mm[0][i][j]-mm[1][i][j]);
    cout<<ans<<endl;
}
int main() {
    init();
    solve();
    return 0;
}
View Code

 

[HAOI2007]理想的正方形

标签:make   str   sample   一个   closed   ++i   clip   segment   opened   

原文地址:https://www.cnblogs.com/Rhythm-/p/9339298.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!