제출 #42301

#제출 시각아이디문제언어결과실행 시간메모리
42301wilwxkLuxury burrow (IZhO13_burrow)C++14
0 / 100
2 ms380 KiB
#include <bits/stdc++.h>
using namespace std;

const int MAXN=1e3+3;
int ori[MAXN][MAXN];
int h[MAXN][MAXN];
int ent[MAXN];
stack<int> st, sti;
int xx, yy, x, respf, maior;

int testa(int k) {
    for(int i=1; i<=xx; i++) {
        for(int j=1; j<=yy; j++) {
            if(ori[i][j]>=k) h[i][j]=1; else h[i][j]=0;
            if(h[i][j]==1) h[i][j]=h[i-1][j]+1; else h[i][j]=0;
        }
    }
    int resp=0;
    while(st.size()) { st.pop(); sti.pop(); } ent[0]=0;
    st.push(-2); sti.push(0);
    for(int i=1; i<=xx; i++) {
        for(int j=1; j<=yy+1; j++) {
            int cur=h[i][j]; if(j==yy+1) cur=-1;
            while(st.top()>=cur) {
                int area=st.top()*(j-ent[sti.top()]);
                resp=max(resp, area);
                st.pop(); sti.pop();
            }
            ent[j]=sti.top(); ent[j]++;
            st.push(h[i][j]); sti.push(j);
        }
    }
    //printf("%d : %d\n", k, resp);
    if(resp>=x) return resp;
    else return -1;

}

int main() {

    int inu=scanf("%d %d %d", &xx, &yy, &x);
    for(int i=1; i<=xx; i++) {
        for(int j=1; j<=yy; j++) {
            int inu=scanf("%d", &ori[i][j]); maior=max(maior, ori[i][j]);
        }
    }

    respf=0;
    for(int i=maior; i>=1; i/=2) {
        while(testa(respf+i)!=-1) respf+=i;
    }

    printf("%d %d\n", respf, testa(respf));


}

컴파일 시 표준 에러 (stderr) 메시지

burrow.cpp: In function 'int main()':
burrow.cpp:44:17: warning: unused variable 'inu' [-Wunused-variable]
             int inu=scanf("%d", &ori[i][j]); maior=max(maior, ori[i][j]);
                 ^
burrow.cpp:41:9: warning: unused variable 'inu' [-Wunused-variable]
     int inu=scanf("%d %d %d", &xx, &yy, &x);
         ^
#Verdict Execution timeMemoryGrader output
Fetching results...