Pagini recente » Cod sursa (job #2552518) | Cod sursa (job #248608) | Cod sursa (job #2426709) | Cod sursa (job #2655621) | Cod sursa (job #2426783)
#include <bits/stdc++.h>
#include <cmath>
using namespace std;
ifstream f("struti.in");
ofstream g("struti.out");
int v[1001][1001],deq[1001],n,m,i,j,minim[1001][1001],maxim[1001][1001],deqc[1001][1001],x,y,q,sol,afis;
int main()
{
f>>n>>m>>q;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
f>>v[i][j];
}
}
int p=1;
int u=0;
for(int z=1;z<=q;z++){
f>>x>>y;
sol=999999999;
afis=0;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
minim[i][j]=0;
maxim[i][j]=0;
deqc[i][j];
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
while(p<=u&&v[i][j]>v[i][deq[u]])
{
u--;
}
u++;
deq[u]=j;
if(j-y>=deq[p])
{
p++;
}
if(j>=y)
{
deqc[i][j-y+1]=v[i][deq[p]];
}
}
p=1;
u=0;
}
p=1;
u=0;
for(j=1;j<=m;j++)
{
for(i=1;i<=n;i++)
{
while(p<=u&&deqc[deq[u]][j]<deqc[i][j])
{
u--;
}
u++;
deq[u]=i;
if(i-x>=deq[p]) p++;
if(i>=x)
{
maxim[i-x+1][j]=deqc[deq[p]][j];
}
}
p=1;
u=0;
}
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
deqc[i][j]=0;
}
}
p=1;
u=0;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
while(p<=u&&v[i][j]<v[i][deq[u]])
{
u--;
}
u++;
deq[u]=j;
if(j-y>=deq[p])
{
p++;
}
if(j>=y)
{
deqc[i][j-y+1]=v[i][deq[p]];
}
}
p=1;
u=0;
}
p=1;
u=0;
for(j=1;j<=m;j++)
{
for(i=1;i<=n;i++)
{
while(p<=u&&deqc[deq[u]][j]>deqc[i][j])
{
u--;
}
u++;
deq[u]=i;
if(i-x>=deq[p]) p++;
if(i>=x)
{
minim[i-x+1][j]=deqc[deq[p]][j];
}
}
p=1;
u=0;
}
for(i=1;i<=n-x+1;i++)
{
for(j=1;j<=m-y+1;j++)
{if(maxim[i][j]-minim[i][j]==sol) afis++;
if(maxim[i][j]-minim[i][j]<sol)
{
sol=maxim[i][j]-minim[i][j];
afis=1;
}
}
}
if(x!=y){
swap(x,y);
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
minim[i][j]=0;
maxim[i][j]=0;
deqc[i][j];
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
while(p<=u&&v[i][j]>v[i][deq[u]])
{
u--;
}
u++;
deq[u]=j;
if(j-y>=deq[p])
{
p++;
}
if(j>=y)
{
deqc[i][j-y+1]=v[i][deq[p]];
}
}
p=1;
u=0;
}
p=1;
u=0;
for(j=1;j<=m;j++)
{
for(i=1;i<=n;i++)
{
while(p<=u&&deqc[deq[u]][j]<deqc[i][j])
{
u--;
}
u++;
deq[u]=i;
if(i-x>=deq[p]) p++;
if(i>=x)
{
maxim[i-x+1][j]=deqc[deq[p]][j];
}
}
p=1;
u=0;
}
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
deqc[i][j]=0;
}
}
p=1;
u=0;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
while(p<=u&&v[i][j]<v[i][deq[u]])
{
u--;
}
u++;
deq[u]=j;
if(j-y>=deq[p])
{
p++;
}
if(j>=y)
{
deqc[i][j-y+1]=v[i][deq[p]];
}
}
p=1;
u=0;
}
p=1;
u=0;
for(j=1;j<=m;j++)
{
for(i=1;i<=n;i++)
{
while(p<=u&&deqc[deq[u]][j]>deqc[i][j])
{
u--;
}
u++;
deq[u]=i;
if(i-x>=deq[p]) p++;
if(i>=x)
{
minim[i-x+1][j]=deqc[deq[p]][j];
}
}
p=1;
u=0;
}
for(i=1;i<=n-x+1;i++)
{
for(j=1;j<=m-y+1;j++)
{if(maxim[i][j]-minim[i][j]==sol) afis++;
if(maxim[i][j]-minim[i][j]<sol)
{
sol=maxim[i][j]-minim[i][j];
afis=1;
}
}
}
}
g<<sol<<" "<<afis<<'\n';
}
}