2 条题解

  • 2
    @ 2026-9-30 19:11:10

    对于测试点 1,2,31, 2, 3,可以直接枚举行的范围,再全排列检查有多少个是符合条件的。

    本题属于优化暴力类型,则我们需要一个高级数据结构优化全排列的过程,这个过程其实是在查询有多少个区间包含当前区间。

    只需要用树状数组和离线查询就可以了,具体看代码。

    #include <bits/stdc++.h>
    using namespace std;
    using uint = unsigned int;
    using ll = long long;
    using ull = unsigned long long;
    constexpr size_t N = 3005;
    int n, m;
    char grid[N][N];
    array<int, 2> arr[N * N];
    int tot;
    int tree[N];
    void add(int i)
    {
        while (i <= m)
        {
            tree[i]++;
            i += i & -i;
        }
    }
    int query(int i)
    {
        int res = 0;
        while (i > 0)
        {
            res += tree[i];
            i &= i - 1;
        }
        return res;
    }
    int query(int l, int r)
    {
        return query(r) - query(l - 1);
    }
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
        cin >> n >> m;
        for (int i = 1; i <= n; i++)
        {
            for (int j = 1; j <= m; j++)
            {
                cin >> grid[j][i];
            }
        }
        swap(n, m);
        for (int i = 1; i <= n; i++)
        {
            for (int l = 1, r = 1; l <= m; l = ++r)
            {
                if (grid[i][r] == '1')
                {
                    continue;
                }
                while (r < m && grid[i][l] == grid[i][r + 1])
                {
                    r++;
                }
                arr[++tot][0] = l;
                arr[tot][1] = r;
            }
        }
        sort(arr + 1, arr + tot + 1);
        int p = 1;
        int res = 0;
        for (int i = 1; i <= m; i++)
        {
            while (p <= tot && arr[p][0] <= i)
            {
                add(arr[p++][1]);
            }
            for (int j = i; j <= m; j++)
            {
                res = max(res, (j - i + 1) * query(j, m));
            }
        }
        cout << res << '\n';
        return 0;
    }
    

    信息

    ID
    2776
    时间
    1000ms
    内存
    128MiB
    难度
    4
    标签
    (无)
    递交数
    13
    已通过
    9
    上传者