Submission #1245442

#TimeUsernameProblemLanguageResultExecution timeMemory
1245442franuchNile (IOI24_nile)C++20
67 / 100
2092 ms9032 KiB
#include "nile.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pll;
#define vc vector
#define st first
#define nd second
#define all(a) a.begin(), a.end()
#define sz(a) (ll)a.size()
#define pub push_back
#define pob pop_back
const ll INF = 1e17;

ll n, q;
vc<ll> w, a, b;
vc<pll> ques;
vc<ll> res;

ll solve(ll D) {
	vc<ll> ord(n);
	iota(all(ord), 0);
	sort(all(ord), [&](ll i, ll j) {
		return w[i] < w[j];
	});
	ll prw = -INF;
	ll best = INF;
	ll sum = 0;
	ll par = 0;
	ll ans = 0;
	for (ll j = 0; j < n; j++) {
		ll i = ord[j];
		if (w[i] - prw > D) {
			if (par % 2 == 0)
				ans += sum;
			else
				ans += sum + best;
			best = INF;
			sum = 0;
			par = 0;
		}
		if (par == 0 or (j + 1 < n and w[ord[j + 1]] - prw <= D))
			best = min(best, a[i] - b[i]);
		prw = w[i];
		sum += b[i];
		par ^= 1;
	}
	if (par % 2 == 0)
		ans += sum;
	else
		ans += sum + best;
	return ans;
}

void program() {
	res.resize(q);
	for (ll i = 0; i < q; i++)
		res[i] = solve(ques[i].st);
}

vc<ll> calculate_costs(vc<int> W, vc<int> A, vc<int> B, vc<int> E) {
	n = sz(W);
	q = sz(E);
	w.assign(all(W));
	a.assign(all(A));
	b.assign(all(B));
	ques.resize(q);
	for (ll i = 0; i < q; i++)
		ques[i] = {E[i], i};
	program();
	return res;
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...