답안 #118144

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
118144 2019-06-18T08:52:44 Z popovicirobert Lightning Conductor (POI11_pio) C++14
100 / 100
106 ms 11180 KB
#include <bits/stdc++.h>
#define lsb(x) (x & (-x))
#define ll long long
#define ull unsigned long long
// 217
// 44

using namespace std;

const int MAXN = (int) 5e5 + 5;

int pref[MAXN + 1], suff[MAXN + 1];
int h[MAXN + 1], sq[1000];

int main() {
    //ifstream cin("B.in");
    //ofstream cout("B.out");
    int i, n;
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);

    cin >> n;
    for(i = 1; i <= n; i++) {
        cin >> h[i];
    }

    for(i = 1; i < 1000; i++) {
        sq[i] = i * i;
    }

    int mx = -1;
    for(int j = 1; j <= n; j++) {
      	int pos;

      	if(h[j] > mx) {
            pref[j] = max(pref[j], h[j]);
            for(i = 1; j + sq[i - 1] < n; i++) {
                pos = j + sq[i - 1] + 1;
                pref[pos] = max(pref[pos], h[j] + i);
            }
      	}
        mx = max(mx, h[j]);
    }

    mx = -1;
    for(int j = n; j >= 1; j--) {
        int pos;

        if(mx < h[j]) {
            suff[j] = max(suff[j], h[j]);
            for(i = 1; j - sq[i - 1] - 1 >= 1; i++) {
                pos = j - sq[i - 1] - 1;
                suff[pos] = max(suff[pos], h[j] + i);
            }
        }
        mx = max(mx, h[j]);
    }

    for(i = n; i >= 1; i--) {
        suff[i] = max(suff[i + 1], suff[i]);
    }

    for(i = 1; i <= n; i++) {
        pref[i] = max(pref[i], pref[i - 1]);
        cout << max(pref[i], suff[i]) - h[i] << "\n";
    }

    //cin.close();
    //cout.close();
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 1024 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 12 ms 1408 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 14 ms 1408 KB Output is correct
2 Correct 10 ms 1408 KB Output is correct
3 Correct 13 ms 1996 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 21 ms 1920 KB Output is correct
2 Correct 20 ms 1920 KB Output is correct
3 Correct 19 ms 2432 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 45 ms 4100 KB Output is correct
2 Correct 42 ms 4068 KB Output is correct
3 Correct 41 ms 4600 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 75 ms 7928 KB Output is correct
2 Correct 73 ms 5932 KB Output is correct
3 Correct 65 ms 7900 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 106 ms 11068 KB Output is correct
2 Correct 95 ms 8184 KB Output is correct
3 Correct 94 ms 11180 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 101 ms 8696 KB Output is correct
2 Correct 96 ms 8188 KB Output is correct
3 Correct 96 ms 11128 KB Output is correct