제출 #1357296

#제출 시각아이디문제언어결과실행 시간메모리
1357296seirisiiiMeasures (CEOI22_measures)C++20
100 / 100
136 ms70988 KiB
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
constexpr ll INF=1e18;
constexpr ll MAXN=500005;
ll n,m,d;
vector<ll> v;
ll tree_mn[4*MAXN];
ll tree_mx[4*MAXN];
ll tree_cnt[4*MAXN];
ll tree_res[4*MAXN];
bool compare(ll i,ll j){
    if(v[i]!=v[j])return v[i]<v[j];
    return i<j;
}
void merge(ll i,ll left,ll right){
    tree_cnt[i]=tree_cnt[left]+tree_cnt[right];
    tree_mn[i]=min(tree_mn[left],tree_mn[right]+tree_cnt[left]*d);
    tree_mx[i]=max(tree_mx[left],tree_mx[right]+tree_cnt[left]*d);
    ll cross_res=(tree_mx[right]+tree_cnt[left]*d)-tree_mn[left];
    tree_res[i]=max({tree_res[left],tree_res[right],cross_res});
    return ;
}
void update(ll i,ll l,ll r,ll key,ll val){
    if(l==r){
        tree_mn[i]=d-val;
        tree_mx[i]=d-val;
        tree_cnt[i]=1;
        tree_res[i]=0;
        return;
    }
    ll mid=l+(r-l)/2;
    if(key<=mid)update(i*2,l,mid,key,val);
    else update(i*2+1,mid+1,r,key,val);
    merge(i,i*2,i*2+1);
    return ;
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin>>n>>m>>d;
    ll total=n+m;
    v.resize(total+1);
    vector<ll> order(total+1);
    for(ll i=1;i<=total;++i){
        cin>>v[i];
        order[i]=i;
    }
    sort(order.begin()+1,order.end(),compare);
    vector<ll> pos(total+1);
    for(ll i=1;i<=total;++i){
        pos[order[i]]=i;
    }
    for(ll i=0;i<4*MAXN;++i){
        tree_mn[i]=INF;
        tree_mx[i]=-INF;
        tree_cnt[i]=0;
        tree_res[i]=0;
    }
    for(ll i=1;i<=total;++i){
        update(1,1,total,pos[i],v[i]);
        if(i>n){
            ll res=tree_res[1];
            cout<<res/2;
            if(res%2!=0)cout<<".5";
            cout<<" ";
        }
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...