제출 #1343203

#제출 시각아이디문제언어결과실행 시간메모리
1343203NipphitchSnowball (JOI21_ho_t2)C++20
0 / 100
1 ms344 KiB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
using namespace std;
using namespace __gnu_pbds;
template <class T> using Tree=tree<T,null_type,less<T>,rb_tree_tag,tree_order_statistics_node_update>;
#define int long long 
const int N=2e5+5;
const int INF=1e18+10;

int n,q,a[N],mn[N],mx[N],now;
vector <int> sum;

signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> n >> q;
    for(int i=1;i<=n;i++) cin >> a[i];
    a[0]=-INF,a[n+1]=INF;
    for(int i=0;i<q;i++){
        int x;
        cin >> x;
        now+=x;
        if(i>0) mn[i]=mn[i-1];
        mn[i]=min(mn[i],now);
        if(i>0) mx[i]=mx[i-1];
        mx[i]=max(mx[i],now);
        sum.push_back(mx[i]-mn[i]);
    }
    //for(int i=0;i<q;i++) cout << mn[i] << " " << mx[i] << "\n";
    for(int i=1;i<=n;i++){
        int ans=0;
        // left
        int idx=lower_bound(sum.begin(),sum.end(),a[i]-a[i-1])-sum.begin();
        idx--;
        int l=a[i-1]+mx[idx];
        ans+=(min(-mn[idx+(idx==q-1?0:1)],a[i]-l));
        //if(i==1) cout << ans << "\n";
        // right
        idx=lower_bound(sum.begin(),sum.end(),a[i+1]-a[i])-sum.begin();
        idx--;
        int r=a[i+1]+mn[idx];
        ans+=(min(mx[idx+(idx==q-1?0:1)],r-a[i]));
        cout << ans << "\n";
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...