社区讨论
人傻常数大,求卡常
P2216[HAOI2007] 理想的正方形参与者 3已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @lo2d8zga
- 此快照首次捕获于
- 2023/10/23 11:56 2 年前
- 此快照最后确认于
- 2023/11/03 12:04 2 年前
1、 下面这段代码是 的吗?
2、如果是,那么如何不吸氧过此题?
CPP#include<bits/stdc++.h>
using namespace std;
const int N=1002;
int a,b,n,m[N][N],ans=2e9;
int mn[N][N],mx[N][N];
struct que{
int val[N],head=0,tail=1;
inline int size(){return head-tail+1;}
inline int front(){return val[head];}
inline int back(){return val[tail];}
inline void pop_front(){--head;}
inline void pop_back(){++tail;}
inline void push_front(int x){val[++head]=x;};
inline void push_back(int x){val[--tail]=x;}
}qmn[N],qmx[N];
template<typename T>inline void read(T &ret){
ret=0;T fh=1;char ch=getchar();
while(ch>'9'||ch<'0'){if(ch=='-')fh=-1;ch=getchar();}
while(ch>='0'&&ch<='9')ret=(ret<<1)+(ret<<3)+(ch^48),ch=getchar();
ret*=fh;
}
int main(){
read(a);read(b);read(n);
for(int i=1;i<=a;++i)
for(int j=1;j<=b;++j){
read(m[i][j]);
mx[i][j]=mn[i][j]=m[i][j];
}
for(int j=1;j<=b;++j){
for(int i=1;i<=a;i++){
while(qmn[i].size()&&m[i][qmn[i].front()]>=m[i][j])qmn[i].pop_front();
while(qmn[i].size()&&qmn[i].back()<=j-n)qmn[i].pop_back();
qmn[i].push_front(j);
while(qmx[i].size()&&m[i][qmx[i].front()]<=m[i][j])qmx[i].pop_front();
while(qmx[i].size()&&qmx[i].back()<=j-n)qmx[i].pop_back();
qmx[i].push_front(j);
if(j>=n&&i>=n){
for(int k=1;k<=n;++k){
int x=i-n+k,y=j-n+1,p=i-n+1;
mn[p][y]=min(mn[p][y],m[x][qmn[x].back()]);
mx[p][y]=max(mx[p][y],m[x][qmx[x].back()]);
}
}
}
}
for(int i=1;i<=a-n+1;++i)
for(int j=1;j<=b-n+1;++j)
ans=min(ans,mx[i][j]-mn[i][j]);
printf("%d\n",ans);
return 0;
}
回复
共 5 条回复,欢迎继续交流。
正在加载回复...