Submission #251046

# Submission time Handle Problem Language Result Execution time Memory
251046 2020-07-20T01:52:14 Z puyu_liao Lightning Conductor (POI11_pio) C++14
27 / 100
133 ms 17016 KB
#include<bits/stdc++.h>
using namespace std;
#define int int64_t
const int N = 500005;
int h[N],ans[N];
int ftable[N];

int f(int i,int j){
    return ftable[abs(i-j)];
}

struct segment{
    int i,l,r;
};

void solve(int n){
    vector<segment> v;
    v.push_back({1,1,n});
    for(int i=2;i<=n;i++){
        segment now; now.i = i; now.l = n+1; now.r = n;
        while(!v.empty() && h[v.back().i] + f(v.back().i,v.back().l) < h[i] + f(i,v.back().l)) {
            now.l = v.back().l;
            v.pop_back();
        }
        if(v.empty() || h[v.back().i] + f(v.back().i,v.back().r) > h[i] + f(i,v.back().r)) {
            if(now.l <= now.r) v.push_back(now);
            continue;
        }
        auto pre = v.back();
        int l = pre.l, r = pre.r;
        while(l != r){
            int m = l+r >> 1;
            if(h[pre.i] + f(pre.i,m) > h[i] + f(i,m)) l=m+1;
            else r = m;
        }
        now.l = l;
        v[v.size()-1].r = l-1;
        v.push_back(now);
    }
    for(auto i : v) for(int j=i.l;j<=i.r;j++) ans[j] = max(ans[j],h[i.i] + f(i.i,j));
}

int32_t main(){
    cin.tie(0); ios_base::sync_with_stdio(false);
    for(int i=1,now=1;i<N;i++){
        if(now*now<i) now++;
        ftable[i] = now;
        //if(i<10)cout << i << ' ' << ftable[i] << '\n';
    }
    int n;
    cin >> n;
    for(int i=1;i<=n;i++) cin >> h[i];
    solve(n);
    reverse(h+1,h+n+1);
    reverse(ans+1,ans+n+1);
    solve(n);
    reverse(ans+1,ans+n+1);
    reverse(h+1,h+n+1);
    for(int i=1;i<=n;i++) cout << ans[i] - h[i] << '\n';
}

Compilation message

pio.cpp: In function 'void solve(int64_t)':
pio.cpp:32:22: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
             int m = l+r >> 1;
                     ~^~
# Verdict Execution time Memory Grader output
1 Incorrect 3 ms 4224 KB Output isn't correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 4224 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 4 ms 4224 KB Output isn't correct
# Verdict Execution time Memory Grader output
1 Correct 11 ms 4992 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 16 ms 5504 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 21 ms 5632 KB Output is correct
2 Incorrect 14 ms 5504 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 29 ms 6144 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 57 ms 8864 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 90 ms 13284 KB Output is correct
2 Incorrect 85 ms 11256 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 130 ms 17016 KB Output is correct
2 Incorrect 122 ms 14064 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 133 ms 14552 KB Output isn't correct
2 Halted 0 ms 0 KB -