Submission #1264876

#TimeUsernameProblemLanguageResultExecution timeMemory
1264876nguyenhuythachLightning Conductor (POI11_pio)C++20
100 / 100
85 ms16964 KiB
#include<bits/stdc++.h>
#include<algorithm>
#include<random>
#include<chrono>
#include<cstdlib>
#include<ctime>
#include<numeric>
#include<vector>
#include<stack>
#include<map>
#include<set>
#include<queue>
#include<iomanip>
#define int long long
#define ll long long
#define L LLONG_MAX
#define fi first
#define se second
#define pii pair<int,int>
#define sz(a) ((int)a.size())
#define FOR(i,j,k) for(int i=j;i<=k;i++)
#define REP(i,k,j) for(int i=k;i>=j;i--)
#define FORD(i,a) for(auto i:a)
#define rngdcl mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count())
#define random(l,r) ((l)+(rng()%(r-l+1)))
using namespace std;
const int mod=1e9+7;
const int nmax=5e5+5;
double sqr[nmax],ans[nmax];
int n,a[nmax];

void dnc(int s, int e, int ps, int pe, int rev)
{
    if(s>e) return;
    int m=(s+e)/2;
    int opt=-1;
    double mx=-1e9;
    FOR(i,ps,min(pe,m-1))
    {
        double cur=a[i]+sqr[m-i];
        if(cur>mx)
        {
            mx=cur;
            opt=i;
        }
    }
    if(rev) ans[n+1-m]=max(ans[n+1-m],mx);
    else ans[m]=max(ans[m],mx);
    dnc(s,m-1,ps,opt,rev);
    dnc(m+1,e,opt,pe,rev);
}

void input()
{
    cin >> n;
    FOR(i,1,n)
    {
        cin >> a[i];
        sqr[i]=sqrt(i);
    }
}

void solve()
{
    dnc(1,n,1,n,0);
    reverse(a+1,a+n+1);
    dnc(1,n,1,n,1);
    reverse(a+1,a+n+1);
    FOR(i,1,n)
    {
        int cu=(int)ceil(ans[i]);
        cout << max(cu-a[i],1ll*0) << ' ';
    }
}

signed main()
{
    //freopen(".inp", "r", stdin);
    //freopen(".out", "w", stdout);
    ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
    input();
    solve();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...