Submission #308081

# Submission time Handle Problem Language Result Execution time Memory
308081 2020-09-30T02:56:50 Z caoash Lightning Conductor (POI11_pio) C++14
63 / 100
801 ms 10300 KB
#include <bits/stdc++.h> 
using namespace std;

using ll = long long;

using vi = vector<int>;
using vl = vector<ll>;
#define pb push_back
#define rsz resize
#define all(x) begin(x), end(x)
#define sz(x) (int)(x).size()

using pi = pair<int,int>;
#define f first
#define s second
#define mp make_pair

const int MX = 200005;
const int MOD = (int) (1e9 + 7);
const ll INF = (ll) 1e18;

int a[MX];
int n;
int st[MX + 1][20];
int lg[MX + 1];

void pre() {
    for (int i = 0; i < n; i++) {
        st[i][0] = a[i];
    }
    for (int j = 1; j <= 19; j++) {
        for (int i = 0; i + (1 << j) <= n; i++) {
            st[i][j] = max(st[i][j - 1], st[i + (1 << (j - 1))][j - 1]);
        }
    }
    lg[1] = 0;
    for (int i = 2; i <= MX; i++) {
        lg[i] = lg[i / 2] + 1;
    }
}

int qmx(int l, int r) {
    int j = lg[r - l + 1];
    int ret = max(st[l][j], st[r - (1 << j) + 1][j]);
    return ret;
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    pre();
    for (int i = 0; i < n; i++) {
        int prev = i;
        int ret = 0;
        int j, k, c;
        if (i != 0) {
            for (j = i - 1, k = 3, c = 1; j >= 0; j -= k, k += 2, c++) {
                int l = j, r = prev - 1;
                ret = max(ret, qmx(l, r) + c);
                prev = j;
            }
            if (j < 0) {
                int l = 0, r = prev - 1;
                if (l <= r) ret = max(ret, qmx(l, r) + c);
            }
            prev = i;
        }
        if (i != n - 1) {
            for (j = i + 1, k = 3, c = 1; j < n; j += k, k += 2, c++) {
                int l = prev + 1, r = j;
                ret = max(ret, qmx(l, r) + c);
                prev = j;
            }
            if (j >= n) {
                int l = prev + 1, r = n - 1;
                if (l <= r) ret = max(ret, qmx(l, r) + c);
            }
        }
        cout << max(0, ret - a[i]) << '\n';
    }
}

# Verdict Execution time Memory Grader output
1 Correct 1 ms 1152 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 1152 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 1152 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 81 ms 3960 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 151 ms 5752 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 258 ms 6780 KB Output is correct
2 Correct 272 ms 6904 KB Output is correct
3 Correct 267 ms 7032 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 764 ms 9776 KB Output is correct
2 Correct 801 ms 9720 KB Output is correct
3 Correct 791 ms 10300 KB Output is correct
# Verdict Execution time Memory Grader output
1 Runtime error 25 ms 2048 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 26 ms 2132 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 35 ms 2040 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 26 ms 2040 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -