제출 #1246446

#제출 시각아이디문제언어결과실행 시간메모리
1246446RecursiveCo사탕 분배 (IOI21_candies)C++20
3 / 100
100 ms11700 KiB
#include "candies.h"
#include <bits/stdc++.h>
using namespace std;

vector<int> distribute_candies(vector<int> c, vector<int> l,
                                    vector<int> r, vector<int> v) {
    int n = c.size();
    int q = l.size();
    vector<int> s(n, 0);
    if (n <= 3000 && q <= 3000) {
        for (int i = 0; i < q; ++i) {
            int L = l[i];
            int R = r[i];
            int V = v[i];
            for (int j = L; j <= R; ++j) {
                if (V > 0) s[j] = min(c[j], s[j] + V);
                else s[j] = max(0, s[j] + V);
            }
        }
    } else {
        vector<pair<int, int>> events;
        for (int i = 0; i < q; ++i) {
            int L = l[i];
            int R = r[i];
            int V = v[i];
            events.push_back({L, V});
            events.push_back({R + 1, -V});
        }
        sort(events.begin(), events.end());
        int ptr = 0;
        int sum = 0;
        for (int i = 0; i < n; ++i) {
            while (ptr < 2 * q && events[ptr].first <= i) sum += events[ptr++].second;
            s[i] = min(c[i], sum);
        }
    }
    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...