Submission #1166896

#TimeUsernameProblemLanguageResultExecution timeMemory
1166896PagodePaivaDistributing Candies (IOI21_candies)C++20
0 / 100
61 ms10940 KiB
#include "candies.h"
#include<bits/stdc++.h>

using namespace std;

const int N = 200010;
long long pref[N][2];

std::vector<int> distribute_candies(std::vector<int> c, std::vector<int> l, std::vector<int> r, std::vector<int> v){
    int n = c.size(), q = l.size();
    for(int i = 0;i < q;i++){
        if(v[i] > 0){
            pref[l[i]][0] += v[i];
            pref[r[i]+1][0] -= v[i];
        }
        else{
            pref[l[i]][1] += v[i];
            pref[r[i]+1][1] -= v[i];
        }
    }
    std::vector<int> s;
    long long res = 0, plus = 0, neg = 0;
    for(int i = 0;i < n;i++){
        if(res+pref[i][0] >= c[0]){
            int diff = c[0]-res;
            res = c[0];
            plus += pref[i][0]-diff;
        }
        else if(plus+pref[i][0] <= 0){
            int diff = plus+pref[i][0];
            plus = 0;
            res += diff;
        }
        else{
            res += pref[i][0];
        }
        if(res+pref[i][1] <= 0){
            int diff = res;
            res = 0;
            neg += pref[i][1]+diff;
        }
        else if(neg+pref[i][1] >= 0){
            int diff = neg+pref[i][1];
            neg = 0;
            res += diff;
        }
        else{
            res += pref[i][1];
        }
     //   cout << res << ' ' << plus << ' ' << neg << '\n';   
        s.push_back(res);
    }
    return s;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...