Pagini recente » Cod sursa (job #3243538) | Cod sursa (job #2692930) | Cod sursa (job #2381139) | Cod sursa (job #1677501) | Cod sursa (job #2284827)
#include <iostream>
#include<queue>
#include<cstdio>
#include<string.h>
#include<limits.h>
using namespace std;
priority_queue<int> hmax;
priority_queue<int> hmin;
int frecv[8005];
int mat[1005][1005];
int altmin,nraltmin,n,m;
void rezolva(int l,int c){
int i,j;
int altaux;
int conti;
for(conti=l;conti<=n;conti++){
memset(frecv,0,sizeof(frecv));
hmax=priority_queue<int> ();
hmin=priority_queue<int> ();
for(i=conti-l+1;i<=conti;i++){
for(j=1;j<=c;j++){
hmax.push(mat[i][j]);
hmin.push(-mat[i][j]);
frecv[mat[i][j]]++;
}
}
altaux=hmax.top()+hmin.top();
if(altmin>altaux){
altmin=altaux;
nraltmin=1;
}
else{
if(altmin==altaux)
nraltmin++;
}
for(j=c+1;j<=m;j++){
for(i=conti-l+1;i<=conti;i++){
frecv[mat[i][j-c]]--;
frecv[mat[i][j]]++;
hmax.push(mat[i][j]);
hmin.push(-mat[i][j]);
}
while(frecv[hmax.top()]==0){
hmax.pop();
}
while(frecv[-hmin.top()]==0){
hmin.pop();
}
altaux=hmax.top()+hmin.top();
if(altmin>altaux){
altmin=altaux;
nraltmin=1;
}
else{
if(altmin==altaux)
nraltmin++;
}
}
}
}
int main()
{
FILE*fin,*fout;
fin=fopen("struti.in","r");
fout=fopen("struti.out","w");
int j,p,i;
fscanf(fin,"%d%d%d",&n,&m,&p);
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
fscanf(fin,"%d",&mat[i][j]);
}
}
int dx,dy;
for(i=1;i<=p;i++){
fscanf(fin,"%d%d",&dx,&dy);
altmin=INT_MAX;
nraltmin=0;
rezolva(dx,dy);
if(dy!=dx)
rezolva(dy,dx);
fprintf(fout,"%d %d\n",altmin,nraltmin);
}
return 0;
}