Submission #1199747

#TimeUsernameProblemLanguageResultExecution timeMemory
1199747SonicMLQuality Of Living (IOI10_quality)C++20
100 / 100
1556 ms106136 KiB
#include <iostream> #include "quality.h" using namespace std; int n, m, high, wide; int const NMAX = 3000; int mat[1 + NMAX][1 + NMAX]; int presum[1 + NMAX][1 + NMAX]; void buildPresum(int lim) { for(int i = 1;i <= n;i++) { for(int j = 1;j <= m;j++) { presum[i][j] = presum[i-1][j] + presum[i][j-1] - presum[i-1][j-1]; if(lim < mat[i][j]) { presum[i][j]++; } } } } bool isGood() { for(int i = high;i <= n;i++) { for(int j = wide;j <= m;j++) { int sum = presum[i][j] - presum[i-high][j] - presum[i][j-wide] + presum[i-high][j-wide]; if(sum + sum < high * wide) { return true; } } } return false; } int cautbin(int from, int to) { if(from >= to) { return from; } else { int mid = (from + to) / 2; buildPresum(mid); if(isGood()) { return cautbin(from, mid); }else { return cautbin(mid+1, to); } } } int rectangle(int R, int C, int H, int W, int Q[3001][3001]) { n = R; m = C; high = H; wide = W; for(int i = 1;i <= n;i++) { for(int j = 1;j <= m;j++) { mat[i][j] = Q[i-1][j-1]; } } return cautbin(1, R * C); }
#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...