Submission #202100

#TimeUsernameProblemLanguageResultExecution timeMemory
202100maruiiLong Distance Coach (JOI17_coach)C++14
100 / 100
243 ms129272 KiB
#include <bits/stdc++.h>
using namespace std;using ll = long long;using pii = pair<ll, ll>;
#define ff first
#define ss second
int N, M;struct CHT {	struct Node {		pii L;		int l, r;		Node() : L(pii(0, 1e18)), l(-1), r(-1) {}	} A[5000005];	ll f(pii L, int x) { return L.ff * x + L.ss; }	int cnt;	void update(int nn, int s, int e, pii L2) {		pii &L1 = A[nn].L;		if (f(L1, s) > f(L2, s)) swap(L1, L2);		if (f(L1, e) <= f(L2, e)) return;		int m = s + e >> 1;		if (f(L1, m) >= f(L2, m)) {			swap(L1, L2);			if (A[nn].l < 0) A[nn].l = ++cnt, A[cnt].L = L1;			update(A[nn].l, s, m, L2);		}		else {			if (A[nn].r < 0) A[nn].r = ++cnt, A[cnt].L = L1;			update(A[nn].r, m + 1, e, L2);		}	}	void update(ll a, ll b) { update(0, 0, M, pii(a, b)); }	ll query(int nn, int s, int e, int x) {		if (nn < 0 || s > x || e < x) return 1e18;		ll ret = f(A[nn].L, x);		int m = s + e >> 1;		return min({ret, query(A[nn].l, s, m, x), query(A[nn].r, m + 1, e, x)});	}	ll query(int x) { return query(0, 0, M, x); }} cht;ll X, T, W;pii R[200005], P[200005];ll D[200005], H[200005], S[200005];int main() {	ios_base::sync_with_stdio(0), cin.tie(0);	cin >> X >> N >> M >> W >> T;	for (int i = 0; i < N; ++i) {		ll x; cin >> x;		R[i] = {x % T, x / T};	}	for (int i = 1; i <= M; ++i) cin >> P[i].ff >> P[i].ss;	R[N] = {X % T, X / T};	sort(R, R + N + 1);	sort(P + 1, P + M + 1);	for (int i = 1; i <= M; ++i) {		S[i] = S[i - 1] + P[i].ss;		H[i] = X / T + (X % T >= P[i].ff);	}	H[0] = X / T + 1;	for (int i = M, j = N; i; --i) {		while (j >= 0 && R[j].ff > P[i].ff) {			cht.update(-W * R[j].ss, D[i + 1] + S[i] + W * i * R[j].ss);			--j;		}		D[i] = min(cht.query(i - 1) - S[i - 1], D[i + 1] + H[i] * W);	}	cout << D[1] + H[0] * W;	return 0;}

Compilation message (stderr)

coach.cpp: In member function 'void CHT::update(int, int, int, pii)':
coach.cpp:5:319: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
 int N, M;struct CHT { struct Node {  pii L;  int l, r;  Node() : L(pii(0, 1e18)), l(-1), r(-1) {} } A[5000005]; ll f(pii L, int x) { return L.ff * x + L.ss; } int cnt; void update(int nn, int s, int e, pii L2) {  pii &L1 = A[nn].L;  if (f(L1, s) > f(L2, s)) swap(L1, L2);  if (f(L1, e) <= f(L2, e)) return;  int m = s + e >> 1;  if (f(L1, m) >= f(L2, m)) {   swap(L1, L2);   if (A[nn].l < 0) A[nn].l = ++cnt, A[cnt].L = L1;   update(A[nn].l, s, m, L2);  }  else {   if (A[nn].r < 0) A[nn].r = ++cnt, A[cnt].L = L1;   update(A[nn].r, m + 1, e, L2);  } } void update(ll a, ll b) { update(0, 0, M, pii(a, b)); } ll query(int nn, int s, int e, int x) {  if (nn < 0 || s > x || e < x) return 1e18;  ll ret = f(A[nn].L, x);  int m = s + e >> 1;  return min({ret, query(A[nn].l, s, m, x), query(A[nn].r, m + 1, e, x)}); } ll query(int x) { return query(0, 0, M, x); }} cht;ll X, T, W;pii R[200005], P[200005];ll D[200005], H[200005], S[200005];int main() { ios_base::sync_with_stdio(0), cin.tie(0); cin >> X >> N >> M >> W >> T; for (int i = 0; i < N; ++i) {  ll x; cin >> x;  R[i] = {x % T, x / T}; } for (int i = 1; i <= M; ++i) cin >> P[i].ff >> P[i].ss; R[N] = {X % T, X / T}; sort(R, R + N + 1); sort(P + 1, P + M + 1); for (int i = 1; i <= M; ++i) {  S[i] = S[i - 1] + P[i].ss;  H[i] = X / T + (X % T >= P[i].ff); } H[0] = X / T + 1; for (int i = M, j = N; i; --i) {  while (j >= 0 && R[j].ff > P[i].ff) {   cht.update(-W * R[j].ss, D[i + 1] + S[i] + W * i * R[j].ss);   --j;  }  D[i] = min(cht.query(i - 1) - S[i - 1], D[i + 1] + H[i] * W); } cout << D[1] + H[0] * W; return 0;}
                                                                                                                                                                                                                                                                                                                             ~~^~~
coach.cpp: In member function 'll CHT::query(int, int, int, int)':
coach.cpp:5:730: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
 int N, M;struct CHT { struct Node {  pii L;  int l, r;  Node() : L(pii(0, 1e18)), l(-1), r(-1) {} } A[5000005]; ll f(pii L, int x) { return L.ff * x + L.ss; } int cnt; void update(int nn, int s, int e, pii L2) {  pii &L1 = A[nn].L;  if (f(L1, s) > f(L2, s)) swap(L1, L2);  if (f(L1, e) <= f(L2, e)) return;  int m = s + e >> 1;  if (f(L1, m) >= f(L2, m)) {   swap(L1, L2);   if (A[nn].l < 0) A[nn].l = ++cnt, A[cnt].L = L1;   update(A[nn].l, s, m, L2);  }  else {   if (A[nn].r < 0) A[nn].r = ++cnt, A[cnt].L = L1;   update(A[nn].r, m + 1, e, L2);  } } void update(ll a, ll b) { update(0, 0, M, pii(a, b)); } ll query(int nn, int s, int e, int x) {  if (nn < 0 || s > x || e < x) return 1e18;  ll ret = f(A[nn].L, x);  int m = s + e >> 1;  return min({ret, query(A[nn].l, s, m, x), query(A[nn].r, m + 1, e, x)}); } ll query(int x) { return query(0, 0, M, x); }} cht;ll X, T, W;pii R[200005], P[200005];ll D[200005], H[200005], S[200005];int main() { ios_base::sync_with_stdio(0), cin.tie(0); cin >> X >> N >> M >> W >> T; for (int i = 0; i < N; ++i) {  ll x; cin >> x;  R[i] = {x % T, x / T}; } for (int i = 1; i <= M; ++i) cin >> P[i].ff >> P[i].ss; R[N] = {X % T, X / T}; sort(R, R + N + 1); sort(P + 1, P + M + 1); for (int i = 1; i <= M; ++i) {  S[i] = S[i - 1] + P[i].ss;  H[i] = X / T + (X % T >= P[i].ff); } H[0] = X / T + 1; for (int i = M, j = N; i; --i) {  while (j >= 0 && R[j].ff > P[i].ff) {   cht.update(-W * R[j].ss, D[i + 1] + S[i] + W * i * R[j].ss);   --j;  }  D[i] = min(cht.query(i - 1) - S[i - 1], D[i + 1] + H[i] * W); } cout << D[1] + H[0] * W; return 0;}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        ~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...