제출 #47557

#제출 시각아이디문제언어결과실행 시간메모리
47557JohnTitor호화 벙커 (IZhO13_burrow)C++11
100 / 100
632 ms12488 KiB
#include <bits/stdc++.h>
using namespace std;
#define FOR(i, j, k) for(int i=(j); i<=(k); i++)
#define FFOR(i, j, k) for(int i=(j); i<(k); i++)
#define DFOR(i, j, k) for(int i=(j); i>=(k); i--)
#define bug(x) cerr<<#x<<" = "<<(x)<<'\n'
#define pb push_back
#define mp make_pair
#define setbit(s, i) (s|=(1LL<<(i)))
#define bit(s, i) (((s)>>(i))&1LL)
#define mask(i) ((1LL<<(i)))
#define builtin_popcount __builtin_popcountll
typedef long long ll;
typedef long double ld;
template <typename T> inline void read(T &x){
    char c;
    bool nega=0;
    while((!isdigit(c=getchar()))&&(c!='-'));
    if(c=='-'){
        nega=1;
        c=getchar();
    }
    x=c-48;
    while(isdigit(c=getchar())) x=x*10+c-48;
    if(nega) x=-x;
}
template <typename T> inline void writep(T x){
    if(x>9) writep(x/10);
    putchar(x%10+48);
}
template <typename T> inline void write(T x){
    if(x<0){
        putchar('-');
        x=-x;
    }
    writep(x);
}
template <typename T> inline void writeln(T x){
    write(x);
    putchar('\n');
}
#define taskname "F"
int n, m, k;
int a[1001][1001];
int h[1001][1001];
int l[1001];
int r[1001];
vector <int> v;
int make(int c){
    FOR(i, 1, n) FOR(j, 1, m) if(a[i][j]>=c) h[i][j]=h[i-1][j]+1; else h[i][j]=0;
    int maxs=0;
    deque <int> d;
    FOR(i, 1, n){
        d.clear();
        FOR(j, 1, m){
            while((!d.empty())&&(h[i][j]<=h[i][d.back()])) d.pop_back();
            l[j]=(d.empty())?1:d.back()+1;
            d.pb(j);
        }
        d.clear();
        DFOR(j, m, 1){
            while((!d.empty())&&(h[i][j]<=h[i][d.back()])) d.pop_back();
            r[j]=(d.empty())?m:d.back()-1;
            d.pb(j);
        }
        FOR(j, 1, m) maxs=max(maxs, h[i][j]*(r[j]-l[j]+1));
    }
    return maxs;
}
int main(){
    #ifdef Kanikou
        if(fopen(taskname".inp", "r"))
            freopen(taskname".inp", "r", stdin);
    #endif // Kanikou
    read(n);
    read(m);
    read(k);
    FOR(i, 1, n) FOR(j, 1, m){
        read(a[i][j]);
        v.pb(a[i][j]);
    }
    sort(v.begin(), v.end());
    v.erase(unique(v.begin(), v.end()), v.end());
    int low=0, high=v.size()-1, mid, ans, best, res;
    while(low<=high){
        mid=(low+high)/2;
        res=make(v[mid]);
        if(res>=k){
            ans=v[mid];
            best=res;
            low=mid+1;
        }
        else high=mid-1;
    }
    write(ans);
    putchar(' ');
    write(best);
}

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

burrow.cpp: In function 'int main()':
burrow.cpp:97:10: warning: 'best' may be used uninitialized in this function [-Wmaybe-uninitialized]
     write(best);
     ~~~~~^~~~~~
burrow.cpp:95:10: warning: 'ans' may be used uninitialized in this function [-Wmaybe-uninitialized]
     write(ans);
     ~~~~~^~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...