Submission #1151559

#TimeUsernameProblemLanguageResultExecution timeMemory
1151559Jawad_Akbar_JJBikeparking (EGOI24_bikeparking)C++20
100 / 100
150 ms16876 KiB
#include <iostream>
#include <set>

using namespace std;
int a[300005], b[300005];

int main(){
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	int n, Ans = 0;
	cin>>n;

	set<pair<int,int>> st;
	for (int i=1;i<=n;i++)
		cin>>a[i], st.insert({i, a[i]}), a[i] = 0;

	for (int i=1;i<=n;i++)
		cin>>b[i];

	for (int i=1, ptr = 1;i<=n;){
		if (st.size() > 0 and (*begin(st)).first < i and b[i]){
			auto u = prev(st.upper_bound({i, 0}));
			auto [id, cap] = *u;

			int k = min(cap, b[i]);
			b[i] -= k, Ans += k;
			if (cap - k)
				st.insert({id, cap - k});
			i += !b[i];
			st.erase(u);
		}
		else
			i++;
	}

	for (auto [i, j] : st)
		a[i] = j;

	for (int i=1;i<=n;i++)
		Ans -= b[i] - min(a[i], b[i]);

	cout<<Ans<<'\n';
}
#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...