Submission #690360

# Submission time Handle Problem Language Result Execution time Memory
690360 2023-01-30T06:56:41 Z moonhero Luxury burrow (IZhO13_burrow) C++14
0 / 100
6 ms 12116 KB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 1e3 + 5;
int a[N][N], x[N][N], n, m, nd, ps[N][N], dp[N];

bool c (int ar, int l, int r) {
    // cout << ar << '\n';
    for (int i = 1; i <= sqrt(ar); i++) {
            int k = l + i - 1, j = r + (ar / i) - 1;
        if (k <= n && j <= m) {
            int sum = ps[k][j] - ps[l - 1][j] - ps[k][r - 1] + ps[l - 1][r - 1];
            // cout << l << ' ' << r << ' ' << k << ' ' << j << ' ' << sum << '\n';
            if (sum == ar) return 1;
        }
    } for (int i = 1; i <= sqrt(ar); i++) {
        int k = l + (ar / i) - 1, j = r + i - 1;
        if (k <= n && j <= m) {
            int sum = ps[k][j] - ps[l - 1][j] - ps[k][r - 1] + ps[l - 1][r - 1];
            // cout << l << ' ' << r << ' ' << k << ' ' << j << ' ' << sum << '\n';
            if (sum == ar) return 1;
        }
    } return 0;
}

int check (int d) {
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            if (a[i][j] >= d) x[i][j] = 1;
            else x[i][j] = 0;
            ps[i][j] = ps[i - 1][j] + ps[i][j - 1] - ps[i - 1][j - 1] + x[i][j];
        } 
    } for (int i = 0; i < N; i++) dp[i] = 0;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            if (x[i][j]) dp[j - 1]++;
            else dp[j - 1] = 0;
        }
    } stack <int> st;
    int ans = 0;
    for (int i = 0; i <= m; i++) {
        while (st.size() && (i == m || dp[i] <= dp[st.top()])) {
            int h = dp[st.top()];
            st.pop();
            int g = 0;
            if (st.size() == 0) g = i;
            else g = i - st.top() - 1;
            ans = max(ans, g * h);
        } st.push(i);
    } 
    // for (int i = 1; i <= n; i++) {
    //     for (int j = 1; j <= m; j++) {
    //         cout << x[i][j] << ' ';
    //     } cout << '\n';
    // } cout << ans << '\n';
    if (ans >= nd) return ans;
    else return 0;
}

int main () {
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    cin >> n >> m >> nd;
    int mx = 0;
    for (int i = 0; i < N; i++) 
        for (int j = 0; j < N; j++) 
            a[i][j] = 0, x[i][j] = 0, ps[i][j] = 0;
    for (int i = 1; i <= n; i++) 
        for (int j = 1; j <= m; j++) {
            cin >> a[i][j];
            mx = max(mx, a[i][j]);
        }
    int l = 0, r = mx, res = 0, ans = 0;
    while (l <= r) {
        int md = (l + r) / 2;    
        // cout << md << ' ' << check(md) << '\n';
        if (check(md) > 0) l = md + 1, res = md, ans = check(md);
        else r = md - 1;
    } cout << res << ' ' << ans << '\n';
    return 0;
}
# Verdict Execution time Memory Grader output
1 Incorrect 6 ms 12116 KB Output isn't correct
2 Halted 0 ms 0 KB -