Pagini recente » Cod sursa (job #1065342) | Cod sursa (job #1511974) | Cod sursa (job #283014) | Cod sursa (job #989091) | Cod sursa (job #2859616)
#include <fstream>
#define nmax 300
#pragma GCC optimize("Ofast")
using namespace std;
int mat[nmax + 1][nmax + 1];
int main()
{
ifstream cin("teren.in");
ofstream cout("teren.out");
int n, m, k, i, j, l, c, st, dr, mij, sol, maxx = 0, act;
cin >> n >> m >> k;
for (i = 1; i <= n; i++)
for (j = 1; j <= m; j++)
if (n > m)
cin >> mat[i][j], mat[i][j] = mat[i][j] + mat[i - 1][j] + mat[i][j - 1] - mat[i - 1][j - 1];
else
cin >> mat[j][i], mat[j][i] = mat[j][i] + mat[j - 1][i] + mat[j][i - 1] - mat[j - 1][i - 1];
if (n < m)
swap(n, m);
for (i = 1; i <= n; i++)
for (j = 1; j <= m; j++)
{
sol = 0;
for (c = j; c <= m && mat[i][c] - mat[i - 1][c] - (mat[i][j - 1] - mat[i - 1][j - 1]) <= k; c++)
{
if (sol != i)
{
st = i, dr = n;
while (st <= dr)
{
mij = (st + dr) / 2;
act = mat[mij][c] - mat[i - 1][c] - mat[mij][j - 1] + mat[i - 1][j - 1];
if (act <= k)
sol = mij, st = mij + 1;
else
dr = mij - 1;
}
if ((sol - i + 1) * (c - j + 1) > maxx)
maxx = (sol - i + 1) * (c - j + 1);
}
else if ((c - j + 1) > maxx)
maxx = (c - j + 1);
}
}
cout << maxx;
return 0;
}