Submission #534807

#TimeUsernameProblemLanguageResultExecution timeMemory
534807Cookie197Snowball (JOI21_ho_t2)C++17
33 / 100
2520 ms2372 KiB
#include<iostream>
#include<algorithm>
#include<vector>
#include<set>

using namespace std;
#define ll long long
#define pii pair<ll,ll> 
#define mp make_pair
#define endl "\n"
#define out(x) cout<< #x << " = " << x << endl
#define outp(x) cout << #x << " first = " << x.first << " second = " << x.second << endl

ll arr[200005], ans[200005];
pii snow[200005];
ll rem[200005];
int n,q;
signed main(){
    ios::sync_with_stdio(false); cin.tie(0);
    cin>>n>>q; n+=2;
    arr[1] = -3e18, arr[n] = 3e18;
    for (int i=2;i<n;i++) cin>>arr[i];
    for (int i=1;i<n;i++) {
        snow[i] = mp(0,0), rem[i] = arr[i+1]-arr[i];
    }
    //out(rem[4]);
    //outp(snow[4]);
    
    while(q--){
        ll x; cin>>x;
        if (x>0){
            for (int i=1;i<n;i++) if (rem[i] > 0){
                snow[i].first -= x;
                if (snow[i].first < 0){
                    ans[i] += min(rem[i],-snow[i].first);
                    snow[i].first = 0;
                }
                snow[i].second += x;
                if (snow[i].second > arr[i+1]-arr[i]){
                    snow[i].second = arr[i+1]-arr[i];
                }
                rem[i] = arr[i+1]-arr[i]-snow[i].first-snow[i].second;
            }
        }else{
            x = abs(x);
            for (int i=1;i<n;i++) if (rem[i] > 0){
                snow[i].second -= x;
                if (snow[i].second < 0){
                    ans[i+1] += min(rem[i], -snow[i].second);
                    snow[i].second = 0;
                }
                snow[i].first += x;
                if (snow[i].first > arr[i+1]-arr[i]){
                    snow[i].first = arr[i+1]-arr[i];
                }
                rem[i] = arr[i+1]-arr[i]-snow[i].first-snow[i].second;
            }
        }
        
        //for (int i=1;i<=n;i++) cout<<ans[i]<<" ";
        //cout<<endl;
        //out(rem[4]);
        //outp(snow[4]);
    }

    for (int i=2;i<n;i++) cout<<ans[i]<<endl;
    //cout<<endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...