Submission #1175856

#TimeUsernameProblemLanguageResultExecution timeMemory
1175856nightingaleQuality Of Living (IOI10_quality)C++20
100 / 100
875 ms70996 KiB
#include <bits/stdc++.h> using namespace std; long long rectangle(int r, int c, int h, int w, int city[3001][3001]) { // Find min and max values for binary search int min_val = INT_MAX, max_val = INT_MIN; for(int i = 0; i < r; i++) { for(int j = 0; j < c; j++) { min_val = min(min_val, city[i][j]); max_val = max(max_val, city[i][j]); } } int window_size = h * w; int median_pos = (window_size + 1) / 2; int lo = min_val, hi = max_val; while(lo < hi) { int mid = lo + (hi - lo) / 2; // Build prefix sum array for elements <= mid int prefix[3002][3002] = {0}; for(int i = 0; i < r; i++) { for(int j = 0; j < c; j++) { prefix[i+1][j+1] = prefix[i+1][j] + prefix[i][j+1] - prefix[i][j] + (city[i][j] <= mid ? 1 : 0); } } // Check all subrectangles bool possible = false; for(int i = 0; i <= r-h; i++) { for(int j = 0; j <= c-w; j++) { int count = prefix[i+h][j+w] - prefix[i][j+w] - prefix[i+h][j] + prefix[i][j]; if(count >= median_pos) { possible = true; break; } } if(possible) break; } if(possible) hi = mid; else lo = mid + 1; } return lo; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...