# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
521876 | antonioqbab | 삶의 질 (IOI10_quality) | C++14 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
int rectangle(int N, int M, int y, int x, int q[3000][3000]){
int left=1, right=N*M;
while(left<right){
int m=(left+right)/2;
auto ok=[&](int cost){
vector<vector<int>> s(N+1,vector<int>(M+1));
for(int i = 1; i<=N;++i)
for(int j=1;j<=M;++j)
s[i][j]=((q[i-1][j-1]<cost)?-1:(q[i-1][j-1]==cost?0:1))+s[i-1][j]+s[i][j-1]-s[i-1][j-1];
for(int i=1;i<=N-y+1;++i)
for(int j=1;j<=M-x+1;++j){
int ii=i+y-1, jj=j+x-1;
if(s[ii][jj]-s[i-1][jj]-s[ii][j-1]+s[i-1][j-1]<=0)
return 1;
}
return 0;
};
if(ok(m))
right=m;
else
left=m+1;
}
return left;
}