Pagini recente » Cod sursa (job #2744620) | Cod sursa (job #681428) | Cod sursa (job #2625386) | Cod sursa (job #2095999) | Cod sursa (job #2678035)
#include<fstream>
#include<algorithm>
using namespace std;
ifstream cin("matrice2.in");
ofstream cout("matrice2.out");
struct ura
{
int x;
int y;
int nr;
};
bool cmp(ura a, ura b)
{
return a.nr > b.nr;
}
ura sef[90001], v[90001];
int m[301][301], n;
ura sefsuprem(ura a)
{
if(sef[n*(a.x-1)+a.y].x == a.x && sef[n*(a.x-1)+a.y].y == a.y)
return a;
else
return sef[n*(a.x-1)+a.y]=sefsuprem(sef[n*(a.x-1)+a.y]);
}
void unire(ura a, ura b)
{
ura sef1=sefsuprem(a);
ura sef2=sefsuprem(b);
sef[(sef2.x-1)*n+sef2.y]=sef1;
}
int main()
{
int q, pp=0, a, b, val;
ura l, c, sef1, sef2;
cin>>n>>q;
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
{
cin>>val;
v[(i-1)*n+j].nr=val;
v[(i-1)*n+j].x=i;
v[(i-1)*n+j].y=j;
m[i][j]=val;
}
}
sort(v+1, v+n*n+1, cmp);
for(int k=1; k<=q; k++)
{
pp=0;
cin>>l.x>>l.y>>c.x>>c.y;
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
sef[n*(i-1)+j]={i, j};
for(int i=1; i<=n*n && pp==0; i++)
{
a=v[i].x;
b=v[i].y;
if(v[i].nr <= m[a+1][b])
{
ura z={a+1, b, m[a+1][b]};
unire(v[i], z);
}
if(v[i].nr <= m[a][b+1])
{
ura z={a, b+1, m[a][b+1]};
unire(v[i], z);
}
if(v[i].nr <= m[a-1][b])
{
ura z={a-1, b, m[a-1][b]};
unire(v[i], z);
}
if(v[i].nr <= m[a][b-1])
{
ura z={a, b-1, m[a][b-1]};
unire(v[i], z);
}
sef1=sefsuprem(l);
sef2=sefsuprem(c);
if(sef1.x == sef2.x && sef1.y == sef2.y)
{
pp=1;
cout<<v[i].nr<<'\n';
}
}
}
return 0;
}