Pagini recente » Cod sursa (job #535296) | Cod sursa (job #847782) | Cod sursa (job #1611168) | Cod sursa (job #2744523) | Cod sursa (job #2491506)
#include <bits/stdc++.h>
#define NMAX 304
#define QMAX 20004
#define pb push_back
#define ft first
#define sd second
using namespace std;
ifstream fin("matrice2.in");
ofstream fout("matrice2.out");
typedef pair <int, pair <int, int>> pairINT;
typedef long long ll;
int n,q,m[NMAX][NMAX],ans[QMAX];
bool used[NMAX][NMAX], usedq[QMAX];
vector <int> waiting[NMAX][NMAX];
vector <pairINT> query[NMAX][NMAX];
priority_queue <pairINT> pq;
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
bool inside(int,int);
int main(){
int maxx=0,x,y,a,b;
fin>>n>>q;
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j){
fin>>m[i][j];
if(m[i][j]>maxx){
maxx=m[i][j];
while(!pq.empty())pq.pop();
}
if(m[i][j] == maxx){
pq.push({maxx, {i, j}});
}
}
for(int i=0;i<q;++i){
fin>>x>>y>>a>>b;
query[x][y].pb({i, {a, b}});
query[a][b].pb({i, {x, y}});
}
while(!pq.empty()){
x=pq.top().sd.ft;
y=pq.top().sd.sd;
for(auto it:waiting[x][y]){
ans[it]=pq.top().ft;
}
for(auto it:query[x][y]){
if(!usedq[it.ft]){
waiting[it.sd.ft][it.sd.sd].pb(it.ft);
usedq[it.ft]=1;
}
}
pq.pop();
for(int i=0;i<4;++i){
if(inside(x+dx[i], y+dy[i]) && !used[x+dx[i]][y+dy[i]]){
used[x+dx[i]][y+dy[i]]=1;
pq.push({min(m[x+dx[i]][y+dy[i]], m[x][y]), {x+dx[i], y+dy[i]}});
}
}
}
for(int i=0;i<q;++i)
fout<<ans[i]<<'\n';
return 0;
}
bool inside(int x,int y){
if(x>0 && x<=n && y>0 && y<=n)
return 1;
return 0;
}