Cod sursa(job #2669190)

Utilizator robert.barbu27robert barbu robert.barbu27 Data 6 noiembrie 2020 13:33:30
Problema Matrice 2 Scor 45
Compilator cpp-64 Status done
Runda abcdefgh Marime 2.19 kb
#include <bits/stdc++.h>
#define pb push_back
#define ll long long
using namespace std;
ifstream f("matrice2.in");
ofstream g("matrice2.out");
const int NMAX=300;
int n,q;
int a[NMAX+5][NMAX+5],k,ans[20005];
struct structura
{
    int lin;
    int col;
    int val;
};
structura v[NMAX*NMAX+5];
int cnt[NMAX+5][NMAX+5];
int dx[4]={1,0,-1,0};
int dy[4]={0,1,0,-1};
pair<int,int> qrr[20005],qrr2[20005];
vector<pair<int,int> > forest[NMAX*NMAX+5];
bool cmp(structura a,structura b)
{
    return a.val>b.val;
}
void unite(int x,int y)
{
    if (forest[x].size()>forest[y].size())
    {
        for(int i=0;i<forest[y].size();i++)
        {
            forest[x].pb(forest[y][i]);
            cnt[forest[y][i].first][forest[y][i].second]=x;
        }
    }
    else
    {
        for(int i=0;i<forest[x].size();i++)
        {
            forest[y].pb(forest[x][i]);
            cnt[forest[x][i].first][forest[x][i].second]=y;
        }
    }
}
int main()
{
    f>>n>>q;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            f>>a[i][j];
            v[++k].val=a[i][j];
            v[k].lin=i;
            v[k].col=j;
        }
    }
    for(int i=1;i<=q;i++) f>>qrr[i].first>>qrr[i].second>>qrr2[i].first>>qrr2[i].second;
    sort(v+1,v+k+1,cmp);
    for(int i=1;i<=k;i++)
    {
        int x=v[i].lin;
        int y=v[i].col;
        cnt[x][y]=i;
        forest[i].pb({x,y});
        for(int dir=0;dir<4;dir++)
        {
            int xx=x+dx[dir];
            int yy=y+dy[dir];
            if(xx>=1&&xx<=n&&yy>=1&&yy<=n&&cnt[xx][yy]!=0)
            {
                if(cnt[xx][yy]!=cnt[x][y])
                {
                    unite(cnt[xx][yy],cnt[x][y]);
                }
            }
        }
        for(int j=1;j<=q;j++)
        {
            if(ans[j]==0)
            {
                if(cnt[qrr[j].first][qrr[j].second]==cnt[qrr2[j].first][qrr2[j].second]&&cnt[qrr[j].first][qrr[j].second]!=0)
                {
                    ans[j]=v[i].val;
                }
            }
        }

    }
    for(int i=1;i<=q;i++) g<<ans[i]<<'\n';
    ///trebuie sa mai raspund la queery









}