Submission #1336280

#TimeUsernameProblemLanguageResultExecution timeMemory
1336280WarinchaiSnowball (JOI21_ho_t2)C++20
100 / 100
785 ms11764 KiB
#include<bits/stdc++.h>
#define int long long
using namespace std;

vector<pair<int,int>>mx;
vector<pair<int,int>>mn;
int ans[200005];
int ll[200005],rr[200005];

int32_t main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int n,q;cin>>n>>q;
    vector<int>v;
    for(int i=1;i<=n;i++){
        int x;cin>>x;
        v.push_back(x);
    }
    int sum=0;
    mx.push_back({0,0});
    mn.push_back({0,0});
    for(int i=1;i<=q;i++){
        int x;cin>>x;
        sum+=x;
        if(sum>mx.back().first)mx.push_back({sum,i});
        if(-sum>mn.back().first)mn.push_back({-sum,i});
    }
    int r=mx.back().first;
    int l=mn.back().first;
    for(int i=1;i<n;i++){
        int x=v[i-1];
        int y=v[i];
        if(x+r<=y-l){
            rr[i]=r;
            ll[i+1]=l;
        }else{
            //cerr<<"i:"<<i<<'\n';
            int st=y-l+1,en=x+r;
            int temp=st-1;
            //cerr<<st<<" "<<en<<"\n";
            while(st<=en){
                int m=(st+en)/2;
                //cerr<<"m:"<<m<<"\n";
                auto it1=lower_bound(mx.begin(),mx.end(),make_pair(m-x,0LL));
                int t1=it1->second;
                auto it2=lower_bound(mn.begin(),mn.end(),make_pair(y-m+1,0LL));
                int t2=it2->second;
                //cerr<<t1<<" "<<t2<<"\n";
                if(t1<=t2){
                    temp=m;
                    st=m+1;
                }else{
                    en=m-1;
                }
            }
            rr[i]=temp-x;
            ll[i+1]+=y-temp;
            //cerr<<"val:"<<x<<" "<<y<<" "<<temp<<"\n\n";
        }
    }
    ll[1]=l;
    rr[n]=r;
    for(int i=1;i<=n;i++){
        //cerr<<ll[i]<<" "<<rr[i]<<"\n";
        cout<<rr[i]+ll[i]<<"\n";
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...