| 5084 | 2023-04-15 21:17:04 | gortomi | Hegyi levegő | cpp17 | Időlimit túllépés 70/100 | 3.091s | 241780 KiB |
#include <bits/stdc++.h>
using namespace std;
vector<vector<pair<int, int> > > p;
vector<vector<int> > r;
pair<int, int> get(pair<int, int> n)
{
return p[n.first][n.second] == make_pair(0, 0) ? n : p[n.first][n.second] = get(p[n.first][n.second]);
}
void unio(pair<int, int> a, pair<int, int> b)
{
a = get(a);
b = get(b);
if(a != b)
{
if(r[a.first][a.second] < r[b.first][b.second]) swap(a, b);
p[a.first][a.second] = b;
if(r[a.first][a.second] == r[b.first][b.second]) r[a.first][a.second]++;
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n, m, q;
scanf("%d %d %d", &n, &m, &q);
p.resize(n + 1, vector<pair<int, int> >(m + 1, make_pair(0, 0)));
r.resize(n + 1, vector<int> (m + 1));
vector<vector<int> > v(n + 2, vector<int>(m + 2, INT_MAX));
vector<int> comp;
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= m; j++)
{
scanf("%d", &v[i][j]);
comp.push_back(v[i][j]);
}
}
sort(comp.begin(), comp.end());
comp.erase(unique(comp.begin(), comp.end()), comp.end());
vector<vector<pair<int, int> > > add(n * m + 1);
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= m; j++)
{
v[i][j] = lower_bound(comp.begin(), comp.end(), v[i][j]) - comp.begin();
add[v[i][j]].push_back({i, j});
}
}
vector<int> l(q), r(q);
vector<pair<int, int> > a(q), b(q);
vector<vector<int> > que(n * m + 1);
for(int i = 0; i < q; i++)
{
scanf("%d %d %d %d", &a[i].first, &a[i].second, &b[i].first, &b[i].second);
l[i] = -1;
r[i] = n * m;
que[(l[i] + r[i]) / 2].push_back(i);
}
int db = 0;
while(db != q)
{
fill(p.begin(), p.end(), vector<pair<int, int> >(m + 1, make_pair(0, 0)));
for(int i = 0; i <= n * m; i++)
{
for(auto z : add[i])
{
int x = z.first, y = z.second;
if(v[x - 1][y] <= i) unio(z, {x - 1, y});
if(v[x + 1][y] <= i) unio(z, {x + 1, y});
if(v[x][y - 1] <= i) unio(z, {x, y - 1});
if(v[x][y + 1] <= i) unio(z, {x, y + 1});
}
for(auto x : que[i])
{
if(get(a[x]) == get(b[x])) r[x] = i;
else l[x] = i;
if(l[x] + 1 == r[x])
{
db++;
}
else
{
que[(l[x] + r[x]) / 2].push_back(x);
}
}
que[i].clear();
}
}
for(int i = 0; i < q; i++) printf("%d\n", comp[r[i]]);
}
| Részfeladat | Összpont | Teszt | Verdikt | Idő | Memória | ||
|---|---|---|---|---|---|---|---|
| subtask1 | 0/0 | ||||||
| 1 | Elfogadva | 3ms | 2056 KiB | ||||
| 2 | Elfogadva | 3ms | 2332 KiB | ||||
| subtask2 | 19/19 | ||||||
| 3 | Elfogadva | 8ms | 3896 KiB | ||||
| 4 | Elfogadva | 10ms | 3840 KiB | ||||
| 5 | Elfogadva | 10ms | 3844 KiB | ||||
| 6 | Elfogadva | 12ms | 3848 KiB | ||||
| 7 | Elfogadva | 12ms | 3972 KiB | ||||
| 8 | Elfogadva | 12ms | 4228 KiB | ||||
| 9 | Elfogadva | 10ms | 4400 KiB | ||||
| 10 | Elfogadva | 9ms | 5868 KiB | ||||
| subtask3 | 20/20 | ||||||
| 11 | Elfogadva | 3ms | 3348 KiB | ||||
| 12 | Elfogadva | 4ms | 3772 KiB | ||||
| 13 | Elfogadva | 24ms | 7600 KiB | ||||
| 14 | Elfogadva | 303ms | 48268 KiB | ||||
| 15 | Elfogadva | 1.921s | 172444 KiB | ||||
| subtask4 | 0/20 | ||||||
| 16 | Elfogadva | 1.378s | 159256 KiB | ||||
| 17 | Időlimit túllépés | 3.063s | 131916 KiB | ||||
| 18 | Elfogadva | 1.865s | 125396 KiB | ||||
| 19 | Elfogadva | 2.072s | 122912 KiB | ||||
| 20 | Elfogadva | 1.855s | 121964 KiB | ||||
| subtask5 | 31/31 | ||||||
| 21 | Elfogadva | 745ms | 90720 KiB | ||||
| 22 | Elfogadva | 614ms | 64680 KiB | ||||
| 23 | Elfogadva | 663ms | 67556 KiB | ||||
| 24 | Elfogadva | 660ms | 67568 KiB | ||||
| 25 | Elfogadva | 425ms | 66752 KiB | ||||
| 26 | Elfogadva | 386ms | 57216 KiB | ||||
| 27 | Elfogadva | 316ms | 57496 KiB | ||||
| 28 | Elfogadva | 287ms | 62356 KiB | ||||
| 29 | Elfogadva | 284ms | 60320 KiB | ||||
| subtask6 | 0/10 | ||||||
| 30 | Időlimit túllépés | 3.072s | 167724 KiB | ||||
| 31 | Időlimit túllépés | 3.091s | 104616 KiB | ||||
| 32 | Időlimit túllépés | 3.051s | 97280 KiB | ||||
| 33 | Időlimit túllépés | 3.061s | 105156 KiB | ||||
| 34 | Elfogadva | 2.421s | 241780 KiB | ||||
| 35 | Elfogadva | 2.924s | 220492 KiB | ||||
| 36 | Elfogadva | 1.593s | 182564 KiB | ||||
| 37 | Elfogadva | 1.238s | 175468 KiB | ||||
| 38 | Elfogadva | 1.144s | 212768 KiB | ||||
| 39 | Elfogadva | 1.174s | 204184 KiB | ||||