Submission #400486

#TimeUsernameProblemLanguageResultExecution timeMemory
400486LawlietLuxury burrow (IZhO13_burrow)C++17
100 / 100
515 ms13988 KiB
#include <bits/stdc++.h> #define MAX 1010 #define INF 1000000010 using namespace std; int n, m, k; int L[MAX]; int R[MAX]; int v[MAX][MAX]; int histogram[MAX]; int largestRectangle() { for(int g = 1 ; g <= m ; g++) { int cur = g - 1; while(histogram[g] <= histogram[cur]) cur = L[cur]; L[g] = cur; } for(int g = m ; g >= 1 ; g--) { int cur = g + 1; while(histogram[g] <= histogram[cur]) cur = R[cur]; R[g] = cur; } int ans = 0; for(int g = 1 ; g <= m ; g++) ans = max(ans , histogram[g]*(R[g] - L[g] - 1)); return ans; } bool test(int l, int t = 0) { int ans = -1; memset(histogram , 0 , sizeof(histogram)); histogram[0] = histogram[m + 1] = -INF; for(int g = 1 ; g <= n ; g++) { for(int h = 1 ; h <= m ; h++) { if(v[g][h] >= l) histogram[h]++; else histogram[h] = 0; } ans = max(ans , largestRectangle()); } if(t == 1) printf("%d\n",ans); return ans >= k; } int bs() { int l = 0, r = INF; while(l < r) { int m = (l + r)/2; if( l == r - 1 ) m = r; if( test(m) ) l = m; else r = m - 1; } return l; } void init() { L[0] = 0; R[m + 1] = m + 1; } int main() { scanf("%d %d %d",&n,&m,&k); init(); for(int g = 1 ; g <= n ; g++) for(int h = 1 ; h <= m ; h++) scanf("%d",&v[g][h]); int ans = bs(); printf("%d ",ans); test(ans , 1); }

Compilation message (stderr)

burrow.cpp: In function 'int main()':
burrow.cpp:90:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   90 |  scanf("%d %d %d",&n,&m,&k);
      |  ~~~~~^~~~~~~~~~~~~~~~~~~~~
burrow.cpp:96:9: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   96 |    scanf("%d",&v[g][h]);
      |    ~~~~~^~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...