Pagini recente » Cod sursa (job #2554480) | Cod sursa (job #50790) | Cod sursa (job #1859225) | Cod sursa (job #1402307) | Cod sursa (job #2683281)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("matrice2.in");
ofstream fout("matrice2.out");
int mat[301][301];
bool bl[301][301];
#define pii pair<int,int>
vector<pair<int,pair<int,int>>>val;
int n,i,j,q,r[20001],valoare;
set<pii>s[301][301];
pair<int,int>t[301][301];
int dl[4]={0,1,0,-1};
int dc[4]={1,0,-1,0};
pii rep(pii x)
{
if(t[x.first][x.second]==make_pair(0,0))
return x;
t[x.first][x.second]=rep(t[x.first][x.second]);
return t[x.first][x.second];
}
void join(pii x,pii y)
{
x=rep(x);
y=rep(y);
if(s[x.first][x.second].size()>s[y.first][y.second].size())
{
swap(x,y);
}
t[x.first][x.second]=y;
auto q=s[x.first][x.second].begin();
for(auto q:s[x.first][x.second])
{
if(q.second==1)
{
if(s[y.first][y.second].find(make_pair(q.first,2))!=s[y.first][y.second].end())
{
r[q.first]=valoare;
s[x.first][x.second].erase(q);
s[y.first][y.second].erase({q.first,2});
}
else
{
s[y.first][y.second].insert(q);
s[x.first][x.second].erase(q);
}
}
else
{
if(s[y.first][y.second].find({q.first,1})!=s[y.first][y.second].end())
{
r[q.first]=valoare;
s[x.first][x.second].erase(q);
s[y.first][y.second].erase({q.first,1});
}
else
{
s[y.first][y.second].insert(q);
s[x.first][x.second].erase(q);
}
}
if(s[x.first][x.second].size()==0)
break;
}
}
int main()
{
fin>>n>>q;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
fin>>mat[i][j];
bl[i][j]=true;
val.push_back({mat[i][j],{i,j}});
}
for(i=1;i<=q;i++)
{
int x1,x2,y1,y2;
fin>>x1>>y1>>x2>>y2;
s[x1][y1].insert({i,1});
s[x2][y2].insert({i,2});
}
sort(val.begin(),val.end());
for(int i=val.size()-1;i>=0;i--)
{
pair<int,pair<int,int>>q=val[i];
valoare=val[i].first;
bl[q.second.first][q.second.second]=false;
for(int k=0;k<4;k++)
{
int l=q.second.first+dl[k];
int c=q.second.second+dc[k];
if(l>=1&&l<=n&&c>=1&&c<=n&&rep({val[i].second})!=rep({l,c})&&!bl[l][c])
{
join(val[i].second,make_pair(l,c));
}
}
}
for(int i=1;i<=q;i++)
fout<<r[i]<<"\n";
}