이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "candies.h"
#include "bits/stdc++.h"
using namespace std;
#include <cassert>
#include <cstdio>
#include <vector>
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();
std::vector<int> s(n);
int q = l.size();
vector<int> list[n];
for(int i=0; i<q; i++) {
for(int j=l[i]; j<=r[i]; j++) list[j].push_back(v[i]);
}
for(int i=0; i<n; i++) {
if(list[i].empty()) {
s[i] = 0; continue;
}
int k = list[i].size();
vector<pair<long long, int> > mss(k);
mss[0].first = max(0, list[i][0]);
if(list[i][0] == mss[0].first) mss[0].second = 0;
else mss[0].second = -1;
for(int j=1; j<k; j++) {
mss[j].first = max(0ll, mss[j-1].first + list[i][j]);
if(mss[j].first == 0) mss[j].second = -1;
else mss[j].second = (mss[j-1].second == -1 ? j : mss[j-1].second);
}
int optidx = 0;
for(int j=0; j<k; j++) {
if(mss[j].first >= c[i] && list[i][j] > 0) {
optidx = j + 1;
}
}
if(optidx == k) {
s[i] = c[i]; continue;
}
long long sum = 0;
long long ans = 0;
for(int j=k-1; j>=optidx; j--) {
sum += list[i][j];
if(j != optidx || optidx == 0) ans = max(ans, sum);
else ans = max(ans, sum + c[i]);
}
s[i] = ans;
}
return s;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |