Submission #941725

#TimeUsernameProblemLanguageResultExecution timeMemory
941725LitusianoSnowball (JOI21_ho_t2)C++17
100 / 100
524 ms17648 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define endl "\n" const int inf = 1e18; signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n,q; cin>>n>>q; vector<int> v(n); for(int& i : v) cin>>i; vector<int> mn(q+1,0), mx(q+1,0); int act = 0; int cnt = 0; vector<int> queries = {0}; for(int _ = 0; _<q; _++){ cnt++; int w; cin>>w; act+=w; queries.push_back(w); mn[cnt] = min(mn[cnt-1],act); mx[cnt] = max(mx[cnt-1],act); } vector<pair<int,int>> intervals(n); for(int i = 0; i<n-1; i++){ // intersection between dif int dif = v[i+1] - v[i]; int l = 0; int r = q+1; while(r > l+1){ int m = (l+r)/2; if(abs(mn[m]) + mx[m] >= dif) r = m; else l = m; } cerr<<r<<" "; if(r == q+1){ intervals[i].second = mx[q]; intervals[i+1].first = mn[q]; } else{ // intersects here if(queries[r] > 0){ // mn rules intervals[i+1].first = mn[r]; intervals[i].second = v[i+1] + mn[r] - v[i]; } else{ intervals[i].second = mx[r]; intervals[i+1].first = -(v[i+1] - (v[i] + mx[r])); } } } // cerr<<"END R"<<endl; intervals[0].first = mn[q]; intervals[n-1].second = mx[q]; for(auto x : intervals){ // cout<<x.first<<" "<<x.second<<" "; cout<<x.second - x.first<<endl; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...