Submission #380360

#TimeUsernameProblemLanguageResultExecution timeMemory
380360loctildoreSnowball (JOI21_ho_t2)C++14
100 / 100
529 ms13676 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define f first
#define s second
#define x first
#define y second
#define elif else if
//#define endl '\n'
#define all(x) begin(x), end(x)
ll n,q,cur,w,day;
ll x[200069],ans[200069],minimum,maximum;
pair<ll,ll> interval[200069];
ll range[200069];
bool dir[200069];//true for right, false for left;
int main()
{
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  cin>>n>>q;
  for (int i = 0; i < n; i++) {
    cin>>x[i];
  }
  for (int i = 0; i < q; i++) {
    cin>>w;
    cur+=w;
    minimum=min(minimum,cur);
    maximum=max(maximum,cur);
    interval[i]={minimum,maximum};
    range[i]=maximum-minimum;
    dir[i]=(cur>0);
  }
  ans[0]-=minimum;
  ans[n-1]+=maximum;
  for (int i = 0; i < n-1; i++) {
    day=lower_bound(range,range+q,x[i+1]-x[i])-range;
    if (day==q) {
      ans[i]+=maximum;
      ans[i+1]-=minimum;
    }
    else{
      if (dir[day]) {
        ans[i+1]-=max(interval[day].f,x[i]-x[i+1]);
        ans[i]+=max(x[i+1]-x[i]+interval[day].f,(ll)0);
      }
      else{
        ans[i]+=min(interval[day].s,x[i+1]-x[i]);
        ans[i+1]+=max(x[i+1]-x[i]-interval[day].s,(ll)0);
      }
    }
  }
  for (int i = 0; i < n; i++) {
    cout<<ans[i]<<endl;
  }
  return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...