4788 | 2023-03-31 12:27:31 | gortomi | Hegyi levegő | cpp17 | Time limit exceeded 70/100 | 3.075s | 234136 KiB |
#include <bits/stdc++.h>
using namespace std;
vector<vector<pair<int, int> > > p;
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) p[a.first][a.second] = b;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n, m, q;
cin >> n >> m >> q;
p.resize(n + 1, vector<pair<int, int> >(m + 1, make_pair(0, 0)));
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++)
{
cin >> 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++)
{
cin >> 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)
{
p.assign(n + 1, 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++) cout << comp[r[i]] << "\n";
}
Subtask | Sum | Test | Verdict | Time | Memory | ||
---|---|---|---|---|---|---|---|
subtask1 | 0/0 | ||||||
1 | Accepted | 3ms | 1892 KiB | ||||
2 | Accepted | 3ms | 2140 KiB | ||||
subtask2 | 19/19 | ||||||
3 | Accepted | 8ms | 3752 KiB | ||||
4 | Accepted | 10ms | 3848 KiB | ||||
5 | Accepted | 10ms | 4008 KiB | ||||
6 | Accepted | 12ms | 4104 KiB | ||||
7 | Accepted | 12ms | 4168 KiB | ||||
8 | Accepted | 12ms | 4396 KiB | ||||
9 | Accepted | 10ms | 4828 KiB | ||||
10 | Accepted | 9ms | 5800 KiB | ||||
subtask3 | 20/20 | ||||||
11 | Accepted | 3ms | 3648 KiB | ||||
12 | Accepted | 4ms | 3980 KiB | ||||
13 | Accepted | 21ms | 7776 KiB | ||||
14 | Accepted | 307ms | 46608 KiB | ||||
15 | Accepted | 1.796s | 164712 KiB | ||||
subtask4 | 0/20 | ||||||
16 | Accepted | 1.236s | 151852 KiB | ||||
17 | Time limit exceeded | 3.059s | 104512 KiB | ||||
18 | Accepted | 1.68s | 121020 KiB | ||||
19 | Accepted | 1.812s | 118504 KiB | ||||
20 | Accepted | 1.705s | 117964 KiB | ||||
subtask5 | 31/31 | ||||||
21 | Accepted | 643ms | 79764 KiB | ||||
22 | Accepted | 578ms | 63772 KiB | ||||
23 | Accepted | 638ms | 66816 KiB | ||||
24 | Accepted | 674ms | 66680 KiB | ||||
25 | Accepted | 430ms | 65208 KiB | ||||
26 | Accepted | 377ms | 56076 KiB | ||||
27 | Accepted | 303ms | 56168 KiB | ||||
28 | Accepted | 291ms | 60424 KiB | ||||
29 | Accepted | 270ms | 58996 KiB | ||||
subtask6 | 0/10 | ||||||
30 | Time limit exceeded | 3.052s | 133576 KiB | ||||
31 | Time limit exceeded | 3.075s | 105896 KiB | ||||
32 | Time limit exceeded | 3.065s | 102952 KiB | ||||
33 | Time limit exceeded | 3.059s | 102332 KiB | ||||
34 | Accepted | 2.875s | 234136 KiB | ||||
35 | Time limit exceeded | 3.069s | 109096 KiB | ||||
36 | Accepted | 1.623s | 179012 KiB | ||||
37 | Accepted | 1.189s | 171668 KiB | ||||
38 | Accepted | 1.271s | 205444 KiB | ||||
39 | Accepted | 1.259s | 198464 KiB |