Submission #744467

#TimeUsernameProblemLanguageResultExecution timeMemory
744467rainboyLuxury burrow (IZhO13_burrow)C11
100 / 100
583 ms13932 KiB
#include <stdio.h> #include <string.h> #define N 1000 #define M 1000 #define INF 0x3f3f3f3f int max(int a, int b) { return a > b ? a : b; } int aa[N][M], n, m; int solve(int a) { static int kk[M], qu[M], ll[M], rr[M]; int cnt, i, j, ans; memset(kk, 0, m * sizeof *kk); ans = 0; for (i = 0; i < n; i++) { for (j = 0; j < m; j++) kk[j] = aa[i][j] >= a ? kk[j] + 1 : 0; cnt = 0; for (j = 0; j < m; j++) { while (cnt && kk[qu[cnt - 1]] >= kk[j]) cnt--; ll[j] = cnt == 0 ? 0 : qu[cnt - 1] + 1; qu[cnt++] = j; } cnt = 0; for (j = m - 1; j >= 0; j--) { while (cnt && kk[qu[cnt - 1]] > kk[j]) cnt--; rr[j] = cnt == 0 ? m - 1 : qu[cnt - 1] - 1; qu[cnt++] = j; } for (j = 0; j < m; j++) ans = max(ans, kk[j] * (rr[j] - ll[j] + 1)); } return ans; } int main() { int k, i, j, lower, upper, a; scanf("%d%d%d", &n, &m, &k); for (i = 0; i < n; i++) for (j = 0; j < m; j++) scanf("%d", &aa[i][j]); lower = 0, upper = INF; while (upper - lower > 1) { a = (lower + upper) / 2; if (solve(a) >= k) lower = a; else upper = a; } printf("%d %d\n", lower, solve(lower)); return 0; }

Compilation message (stderr)

burrow.c: In function 'main':
burrow.c:44:2: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   44 |  scanf("%d%d%d", &n, &m, &k);
      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~
burrow.c:47:4: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   47 |    scanf("%d", &aa[i][j]);
      |    ^~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...