15889 | 2025-03-07 14:20:45 | peti1234 | Hegyi levegő | cpp17 | Elfogadva 100/100 | 1.97s | 201164 KiB |
#include <bits/stdc++.h>
using namespace std;
const int c=500005, k=20;
int n, m, q, ki[c], fel[c][k], maxi[c][k], szint[c];
bool v[c];
vector<vector<int> > t;
vector<pair<int, int> > sz[c];
vector<pair<int, pair<int, int> > > el;
int holvan(int a) {
return (ki[a] ? ki[a]=holvan(ki[a]) : a);
}
bool unio(int a, int b) {
a=holvan(a), b=holvan(b);
if (a!=b) {
ki[a]=b;
return true;
}
return false;
}
void dfs(int a) {
v[a]=true;
for (int i=1; i<k; i++) {
int s=fel[a][i-1];
fel[a][i]=fel[s][i-1];
maxi[a][i]=max(maxi[a][i-1], maxi[s][i-1]);
}
for (auto p:sz[a]) {
int x=p.first, y=p.second;
if (!v[x]) {
szint[x]=szint[a]+1;
fel[x][0]=a, maxi[x][0]=y;
dfs(x);
}
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cin >> n >> m >> q;
t.resize(n);
for (int i=0; i<n; i++) {
t[i].resize(m);
for (int j=0; j<m; j++) {
cin >> t[i][j];
int x=i*m+j+1, s=t[i][j];
if (i>0) el.push_back({max(s, t[i-1][j]), {x, x-m}});
if (j>0) el.push_back({max(s, t[i][j-1]), {x, x-1}});
}
}
sort(el.begin(), el.end());
for (auto x:el) {
int s=x.first, a=x.second.first, b=x.second.second;
if (unio(a, b)) {
//cout << "fontos " << a << " " << b << " " << s << "\n";
sz[a].push_back({b, s});
sz[b].push_back({a, s});
}
}
szint[1]=1;
dfs(1);
while (q--) {
int x1, y1, x2, y2, a, b, ans=0;
cin >> x1 >> y1 >> x2 >> y2;
a=m*(x1-1)+y1, b=m*(x2-1)+y2;
if (szint[a]<szint[b]) {
swap(a, b);
}
for (int i=k-1; i>=0; i--) {
if (szint[fel[a][i]]>=szint[b]) {
ans=max(ans, maxi[a][i]);
a=fel[a][i];
}
}
for (int i=k-1; i>=0; i--) {
if (fel[a][i]!=fel[b][i]) {
ans=max({ans, maxi[a][i], maxi[b][i]});
a=fel[a][i], b=fel[b][i];
}
}
if (a!=b) {
ans=max({ans, maxi[a][0], maxi[b][0]});
}
cout << ans << "\n";
}
return 0;
}
Részfeladat | Összpont | Teszt | Verdikt | Idő | Memória | ||
---|---|---|---|---|---|---|---|
subtask1 | 0/0 | ||||||
1 | Elfogadva | 9ms | 12084 KiB | ||||
2 | Elfogadva | 12ms | 12084 KiB | ||||
subtask2 | 19/19 | ||||||
3 | Elfogadva | 14ms | 13620 KiB | ||||
4 | Elfogadva | 14ms | 13512 KiB | ||||
5 | Elfogadva | 18ms | 13248 KiB | ||||
6 | Elfogadva | 17ms | 13320 KiB | ||||
7 | Elfogadva | 18ms | 13320 KiB | ||||
8 | Elfogadva | 16ms | 13456 KiB | ||||
9 | Elfogadva | 16ms | 13548 KiB | ||||
10 | Elfogadva | 17ms | 13876 KiB | ||||
subtask3 | 20/20 | ||||||
11 | Elfogadva | 9ms | 11964 KiB | ||||
12 | Elfogadva | 14ms | 12340 KiB | ||||
13 | Elfogadva | 28ms | 15348 KiB | ||||
14 | Elfogadva | 231ms | 44604 KiB | ||||
15 | Elfogadva | 894ms | 167572 KiB | ||||
subtask4 | 20/20 | ||||||
16 | Elfogadva | 1.047s | 162964 KiB | ||||
17 | Elfogadva | 1.115s | 188368 KiB | ||||
18 | Elfogadva | 986ms | 137852 KiB | ||||
19 | Elfogadva | 867ms | 132500 KiB | ||||
20 | Elfogadva | 939ms | 131976 KiB | ||||
subtask5 | 31/31 | ||||||
21 | Elfogadva | 342ms | 52196 KiB | ||||
22 | Elfogadva | 365ms | 42064 KiB | ||||
23 | Elfogadva | 340ms | 40888 KiB | ||||
24 | Elfogadva | 305ms | 40884 KiB | ||||
25 | Elfogadva | 347ms | 47268 KiB | ||||
26 | Elfogadva | 294ms | 38572 KiB | ||||
27 | Elfogadva | 280ms | 41132 KiB | ||||
28 | Elfogadva | 312ms | 47528 KiB | ||||
29 | Elfogadva | 263ms | 47776 KiB | ||||
subtask6 | 10/10 | ||||||
30 | Elfogadva | 1.519s | 201164 KiB | ||||
31 | Elfogadva | 1.97s | 150656 KiB | ||||
32 | Elfogadva | 1.674s | 144888 KiB | ||||
33 | Elfogadva | 1.325s | 144224 KiB | ||||
34 | Elfogadva | 1.838s | 175780 KiB | ||||
35 | Elfogadva | 1.636s | 165756 KiB | ||||
36 | Elfogadva | 1.19s | 134540 KiB | ||||
37 | Elfogadva | 987ms | 142472 KiB | ||||
38 | Elfogadva | 1.213s | 176276 KiB | ||||
39 | Elfogadva | 1.269s | 178560 KiB |