제출 #1356542

#제출 시각아이디문제언어결과실행 시간메모리
1356542Jawad_Akbar_JJ사탕 분배 (IOI21_candies)C++17
0 / 100
49 ms12328 KiB
#include <iostream>
#include <vector>

using namespace std;
const int N = 1<<18;
long long Pre[N], Mn[N], Mx[N];

vector<int> distribute_candies(vector<int> c, vector<int> l, vector<int> r, vector<int> v){
	int n = c.size(), q = l.size();

	for (int i=1;i<=q;i++){
		Pre[i] = Pre[i-1] + v[i-1];
		Mn[i] = min(Mn[i-1], Pre[i]);
		Mx[i] = max(Mx[i-1], Pre[i]);
		// cout<<Pre[i]<<'\n';
	}
	// cout<<endl;

	vector<int> ans;
	for (int i=0;i<n;i++){
		if (Mx[q] - Mn[q] < c[i]){
			ans.push_back(Pre[q]);
			continue;
		}

		int l = 1, r = q+1;
		while (l + 1 < r){
			int m = (l + r) / 2;
			// cout<<m<<' '<<Mx[m]<<' '<<Mn[m]<<endl;
			if (Pre[m] - Mn[m] >= c[i] or Mx[m] - Pre[m] >= c[i])
				l = m;
			else
				r = m;
		}
		// cout<<i<<' '<<l<<endl;
		if (Pre[l] == Mx[l])
			ans.push_back(c[i] + Pre[q] - Pre[l]);
		else
			ans.push_back(Pre[q] - Pre[l]);
	}
	return ans;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…