Submission #238780

#TimeUsernameProblemLanguageResultExecution timeMemory
238780JatanaMeetings (IOI18_meetings)C++17
Compilation error
0 ms0 KiB
#include "meetings.h"

#define le(v) ((int)v.size())
#define pb push_back
#define mp make_pair
#define f(i, n) for (int i = 0; i < (n); i++)

using namespace std;

typedef long long ll;

vector<int> H;
vector<ll> dp[2];
vector<int> L;
vector<int> R;
vector<ll> rez;
vector<vector<int>> qs;

void go(int l, int r) {
	if (l >= r) return;
	if (l + 1 == r) {
		f(t, 2) {
			dp[t][l] = H[l];	
		}
		for (int id : qs[l]) {
			rez[id] = H[l];
		}
		return;
	}
	int m = l;
	for (int i = l; i < r; i++)
		if (H[i] > H[m]) 
			m = i;
	go(l, m);
	go(m + 1, r);
	for (int id : qs[m]) {
		// either left or right
		rez[id] = min(
			dp[0][R[id]] + 1LL * H[m] * (m - L[id] + 1),
			dp[1][L[id]] + 1LL * H[m] * (R[id] - m + 1)
		);
	}
	dp[0][m] = (m - 1 >= l ? dp[0][m - 1] : 0) + H[m];
	for (int i = m + 1; i < r; i++) {
		dp[0][i] = min(
			dp[0][i] + 1LL * (m - l + 1) * H[m],
			dp[0][m] + 1LL * (i - m) * H[m]
		);
	}
	dp[1][m] = (m + 1 < r ? dp[1][m + 1] : 0) + H[m];
	for (int i = m - 1; i >= l; i--) {
		dp[1][i] = min(
			dp[1][i] + 1LL * (r - m) * H[m],
			dp[1][m] + 1LL * (m - i) * H[m]
		);
	}
}

vector<ll> minimum_costs(vector<int> _H, vector<int> _L,
    vector<int> _R) {
	L = _L;
	R = _R;
	H = _H;
	dp[0].resize(le(H));
	dp[1].resize(le(H));
	qs.resize(le(H));
  int Q = L.size();
	for (int i = 0; i < Q; i++) {
		int pos = max_element(H.begin() + L[i], H.begin() + R[i] + 1) - H.begin();
		qs[pos].pb(i);
	}
	rez.resize(Q, (ll)1e18);
	go(0, le(H));
  return rez;
}

Compilation message (stderr)

meetings.cpp: In function 'std::vector<long long int> minimum_costs(std::vector<int>, std::vector<int>, std::vector<int>)':
meetings.cpp:69:13: error: 'max_element' was not declared in this scope
   int pos = max_element(H.begin() + L[i], H.begin() + R[i] + 1) - H.begin();
             ^~~~~~~~~~~
meetings.cpp:69:13: note: suggested alternative: 'max_align_t'
   int pos = max_element(H.begin() + L[i], H.begin() + R[i] + 1) - H.begin();
             ^~~~~~~~~~~
             max_align_t