40992023-03-14 14:34:33Szin AttilaHegyi levegőcpp14Időlimit túllépés 90/1003.105s514180 KiB
#include <bits/stdc++.h>
using namespace std;
#define InTheNameOfGod ios::sync_with_stdio(0);cin.tie(0); cout.tie(0);
using ll = long long;

const int maxN = 2e5 + 5;
const int MOD = 1e9 + 7;
const int INF = 1e9 + 7;

vector<int> p, s, mo;
vector<set<int> > edges;
int curr;

int root(int x) {
   if(p[x] == x) return x;
   if(p[x] == -1) return -1;

   return (p[x] = root(p[x]));
}

void connect(int a, int b) {
   a = root(a), b = root(b);

   if(a == b || a == -1 || b == -1) return;

   if(s[a] < s[b]) swap(a, b);

   p[b] = a;
   s[a] += s[b];
   for(int i : edges[b]) {
      if(edges[a].find(i) == edges[a].end()) edges[a].insert(i);
      else {
         mo[i] = curr;
         edges[a].erase(i);
      }
   }
}

int main() {

   InTheNameOfGod;

   int n,m,q;
   cin >> n >> m >> q;
   map<int, vector<int> > ma;
   for(int i = 0; i < n*m; i++) {
      int x;
      cin >> x;
      ma[x].push_back(i);
   }

   p.resize(n*m+1, -1);
   s.resize(n*m+1, 0);
   edges.resize(n*m+1);
   mo.resize(q, -1);

   for(int i = 0; i < q; i++) {
      int a,b,c,d;
      cin >> a >> b >> c >> d;
      edges[m*(a-1) + b-1].insert(i);
      edges[m*(c-1) + d-1].insert(i);
   }
   
   for(auto i : ma) {
      curr = i.first;
      for(int x : i.second) {
         p[x] = x;
         s[x] = 1;
         if(x % m > 0) connect(x, x-1);
         if(x % m < m-1) connect(x, x+1);
         if(x > m-1) connect(x, x-m);
         if(x < (n-1)*m) connect(x, x+m);
      } 
   }

   for(int i : mo) cout << i << "\n";
   
   return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1824 KiB
2Elfogadva3ms2080 KiB
subtask219/19
3Elfogadva8ms4640 KiB
4Elfogadva8ms4596 KiB
5Elfogadva8ms4588 KiB
6Elfogadva8ms4416 KiB
7Elfogadva8ms4524 KiB
8Elfogadva8ms4820 KiB
9Elfogadva8ms5296 KiB
10Elfogadva8ms5384 KiB
subtask320/20
11Elfogadva3ms3184 KiB
12Elfogadva4ms4156 KiB
13Elfogadva41ms15108 KiB
14Elfogadva550ms145356 KiB
15Elfogadva1.791s413676 KiB
subtask420/20
16Elfogadva1.034s203128 KiB
17Elfogadva1.077s203288 KiB
18Elfogadva1.087s239952 KiB
19Elfogadva929ms191572 KiB
20Elfogadva913ms179832 KiB
subtask531/31
21Elfogadva1.269s255536 KiB
22Elfogadva944ms184736 KiB
23Elfogadva805ms147144 KiB
24Elfogadva850ms147564 KiB
25Elfogadva1.223s256068 KiB
26Elfogadva926ms174216 KiB
27Elfogadva1.133s336084 KiB
28Elfogadva1.203s354760 KiB
29Elfogadva1.202s346936 KiB
subtask60/10
30Időlimit túllépés3.072s345088 KiB
31Időlimit túllépés3.055s299208 KiB
32Időlimit túllépés3.065s242372 KiB
33Időlimit túllépés3.059s226680 KiB
34Időlimit túllépés3.088s383468 KiB
35Időlimit túllépés3.072s306352 KiB
36Elfogadva2.388s514180 KiB
37Időlimit túllépés3.105s480660 KiB
38Időlimit túllépés3.095s503044 KiB
39Időlimit túllépés3.098s446228 KiB