| 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 | ||||