41002023-03-14 14:46:21Szin AttilaHegyi levegőcpp14Időlimit túllépés 90/1003.085s514164 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 readInt() {
	bool minus = false;
	int result = 0;
	char ch;
	ch = getchar();
	while (true) {
		if (ch == '-') break;
		if (ch >= '0' && ch <= '9') break;
		ch = getchar();
	}
	if (ch == '-') minus = true; else result = ch-'0';
	while (true) {
		ch = getchar();
		if (ch < '0' || ch > '9') break;
		result = result*10 + (ch - '0');
	}
	if (minus)
		return -result;
	else
		return result;
}

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 = readInt(),m = readInt(),q = readInt();
   map<int, vector<int> > ma;
   for(int i = 0; i < n*m; i++) {
      int x = readInt();
      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 = readInt(),b = readInt(),c = readInt(),d = readInt();
      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
1Elfogadva3ms1840 KiB
2Elfogadva3ms2200 KiB
subtask219/19
3Elfogadva8ms4692 KiB
4Elfogadva8ms4780 KiB
5Elfogadva7ms4796 KiB
6Elfogadva7ms4832 KiB
7Elfogadva7ms5128 KiB
8Elfogadva7ms5144 KiB
9Elfogadva8ms5728 KiB
10Elfogadva7ms5928 KiB
subtask320/20
11Elfogadva2ms3716 KiB
12Elfogadva4ms4712 KiB
13Elfogadva39ms15496 KiB
14Elfogadva603ms145836 KiB
15Elfogadva2.076s414284 KiB
subtask420/20
16Elfogadva987ms203276 KiB
17Elfogadva985ms203428 KiB
18Elfogadva1.22s240060 KiB
19Elfogadva825ms191720 KiB
20Elfogadva769ms180100 KiB
subtask531/31
21Elfogadva995ms255652 KiB
22Elfogadva890ms185080 KiB
23Elfogadva755ms147480 KiB
24Elfogadva801ms147548 KiB
25Elfogadva1.113s255940 KiB
26Elfogadva879ms174416 KiB
27Elfogadva1.123s336380 KiB
28Elfogadva1.238s355132 KiB
29Elfogadva1.217s347312 KiB
subtask60/10
30Időlimit túllépés3.085s373564 KiB
31Időlimit túllépés3.082s299388 KiB
32Időlimit túllépés3.073s242420 KiB
33Elfogadva2.733s449516 KiB
34Időlimit túllépés3.045s394440 KiB
35Időlimit túllépés3.072s372192 KiB
36Elfogadva2.28s514164 KiB
37Időlimit túllépés3.062s480692 KiB
38Időlimit túllépés3.085s503072 KiB
39Időlimit túllépés3.075s492444 KiB