Submission #1248523

#TimeUsernameProblemLanguageResultExecution timeMemory
1248523adrilenDistributing Candies (IOI21_candies)C++17
0 / 100
49 ms11440 KiB
#include "candies.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;

std::vector<int> distribute_candies(std::vector<int> c, std::vector<int>l, std::vector<int> r, std::vector<int> v) {
    
    vector<ll> prefix;
    prefix.push_back(v.front());
    int n = v.size();
    for (int i = 1; i < n; i++) prefix.push_back(v[i] + prefix.back());

    vector<ll>min_prefix(n), max_prefix(n);
    min_prefix[n - 1] = max_prefix[n - 1] = prefix.back();
    for (int i = n - 2; i >= 0; i--)
    {
        min_prefix[i] = min(min_prefix[i+1], prefix[i]);
        max_prefix[i] = max(max_prefix[i + 1], prefix[i]);
    }
    
    vector<int> output;
    for (int i = 0; i < n; i++)
    {
        int lower = 0, upper = n - 1, mid;
        while (lower < upper)
        {
            mid = (lower + upper + 1) / 2;

            if (max_prefix[mid] - min_prefix[i] >= c[i]) lower = mid;
            else upper = mid - 1;
        }

        if (max_prefix[lower] == max_prefix[lower + 1])
        {
            output[i] = c[i] - (max_prefix[lower] - prefix.back());
        } else {
            output[i] = prefix.back() -  min_prefix[lower];
        }
    }
    return output;
}

#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...