# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
441223 | parsabahrami | Luxury burrow (IZhO13_burrow) | C++17 | 566 ms | 17952 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
typedef pair<int, int> pii;
#define SZ(x) (int) x.size()
#define F first
#define S second
const int N = 1e3 + 10, MOD = 1e9 + 7;
int A[N][N], L[N], R[N], up[N][N], n, k, m;
int get(int x) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (A[i][j] < x) { up[i][j] = 0; continue; }
if (A[i - 1][j] >= x) up[i][j] = up[i - 1][j] + 1;
else up[i][j] = 1;
}
}
int ret = 0;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
for (L[j] = j - 1; L[j] && up[i][L[j]] >= up[i][j]; L[j] = L[L[j]]);
}
for (int j = m; j; j--) {
for (R[j] = j + 1; R[j] <= m && up[i][R[j]] >= up[i][j]; R[j] = R[R[j]]);
}
for (int j = 1; j <= m; j++) {
ret = max(ret, up[i][j] * (R[j] - L[j] - 1));
}
}
return ret;
}
int main() {
scanf("%d%d%d", &n, &m, &k);
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
scanf("%d", &A[i][j]);
int l = 0, r = MOD;
while (r - l > 1) {
int md = (l + r) >> 1;
if (get(md) < k) r = md;
else l = md;
}
printf("%d %d\n", l, get(l));
return 0;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |