제출 #1166926

#제출 시각아이디문제언어결과실행 시간메모리
1166926PagodePaiva사탕 분배 (IOI21_candies)C++20
0 / 100
63 ms10944 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(pref[i][0] <= 0){
            if(plus >= -pref[i][0]) plus += pref[i][0];
            else{
                pref[i][0] += plus;
                plus = 0;
                res += pref[i][0];
                if(res < 0){
                    neg += res;
                    res = 0;
                }
            } 
        }
        else{
            if(pref[i][0]+res >= c[i]){
                long long diff = c[i]-res;
                res = c[i];
                plus += pref[i][0]-diff;
            }
            else{
                res += pref[i][0];
            }
        }
        if(pref[i][1] >= 0){
            if(-neg >= pref[i][1]) neg += pref[i][1];
            else{
                pref[i][1] += neg;
                neg = 0;
                res += pref[i][1];
                if(res >= c[i]){
                    plus += res-c[i];
                    res = c[i];
                }
            }
        }
        else{
            if(pref[i][1]+res <= 0){
                long long diff = res;
                res = 0;
                neg += pref[i][1]+diff;
            }
            else{
                res += pref[i][1];
            }
        }
        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...