4099 2023. 03. 14 14:34:33 Szin Attila Hegyi levegő cpp14 Időlimit túllépés 90/100 3.105s 514180 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 Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 1824 KiB
2 Elfogadva 3ms 2080 KiB
subtask2 19/19
3 Elfogadva 8ms 4640 KiB
4 Elfogadva 8ms 4596 KiB
5 Elfogadva 8ms 4588 KiB
6 Elfogadva 8ms 4416 KiB
7 Elfogadva 8ms 4524 KiB
8 Elfogadva 8ms 4820 KiB
9 Elfogadva 8ms 5296 KiB
10 Elfogadva 8ms 5384 KiB
subtask3 20/20
11 Elfogadva 3ms 3184 KiB
12 Elfogadva 4ms 4156 KiB
13 Elfogadva 41ms 15108 KiB
14 Elfogadva 550ms 145356 KiB
15 Elfogadva 1.791s 413676 KiB
subtask4 20/20
16 Elfogadva 1.034s 203128 KiB
17 Elfogadva 1.077s 203288 KiB
18 Elfogadva 1.087s 239952 KiB
19 Elfogadva 929ms 191572 KiB
20 Elfogadva 913ms 179832 KiB
subtask5 31/31
21 Elfogadva 1.269s 255536 KiB
22 Elfogadva 944ms 184736 KiB
23 Elfogadva 805ms 147144 KiB
24 Elfogadva 850ms 147564 KiB
25 Elfogadva 1.223s 256068 KiB
26 Elfogadva 926ms 174216 KiB
27 Elfogadva 1.133s 336084 KiB
28 Elfogadva 1.203s 354760 KiB
29 Elfogadva 1.202s 346936 KiB
subtask6 0/10
30 Időlimit túllépés 3.072s 345088 KiB
31 Időlimit túllépés 3.055s 299208 KiB
32 Időlimit túllépés 3.065s 242372 KiB
33 Időlimit túllépés 3.059s 226680 KiB
34 Időlimit túllépés 3.088s 383468 KiB
35 Időlimit túllépés 3.072s 306352 KiB
36 Elfogadva 2.388s 514180 KiB
37 Időlimit túllépés 3.105s 480660 KiB
38 Időlimit túllépés 3.095s 503044 KiB
39 Időlimit túllépés 3.098s 446228 KiB