Submission #224605

#TimeUsernameProblemLanguageResultExecution timeMemory
224605dolphingarlicBulldozer (JOI17_bulldozer)C++14
100 / 100
1049 ms47648 KiB
#include <bits/stdc++.h>
#define FOR(i, x, y) for (int i = x; i < y; i++)
typedef long long ll;
using namespace std;

struct X {
	ll l, r, t, b;

	X operator+(X B) {
		return {max(l, t + B.l), max(B.r, r + B.t), t + B.t, max(max(b, B.b), r + B.l)};
	}
} T[8001];

struct Y {
	ll x, y, v;

	bool operator<(Y B) {
		if (x == B.x) return y < B.y;
		return x < B.x;
	}
} P[2001];

struct Z {
	ll x, y;
	int u, v;

	bool operator<(Z B) {
		if (y * B.x == B.y * x) return tie(u, v) < tie(B.u, B.v);
		return y * B.x < B.y * x;
	}
} S[2000001];

int n, curr[2001];

void B(int N = 1, int l = 1, int r = n) {
	if (l == r) {
		ll v = max(P[l].v, 0ll);
		T[N] = {v, v, P[l].v, v};
	} else {
		int M = (l + r) / 2;
		B(N * 2, l, M);
		B(N * 2 + 1, M + 1, r);
		T[N] = T[N * 2] + T[N * 2 + 1];
	}
}

void U(int o, ll a, int N = 1, int l = 1, int r = n) {
	if (l == r) T[N] = {max(a, 0ll), max(a, 0ll), a, max(a, 0ll)};
	else {
		int M = (l + r) / 2;
		if (o > M) U(o, a, N * 2 + 1, M + 1, r);
		else U(o, a, N * 2, l, M);
		T[N] = T[N * 2] + T[N * 2 + 1];
	}
}

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cin >> n;
	FOR(i, 1, n + 1) {
		cin >> P[i].x >> P[i].y >> P[i].v;
		curr[i] = i;
	}
	sort(P + 1, P + n + 1);
	int cnt = 0;
	FOR(i, 1, n + 1) FOR(j, i + 1, n + 1)
		S[cnt++] = {P[j].x - P[i].x, P[j].y - P[i].y, i, j};
	sort(S, S + cnt);

	B();
	ll ans = T[1].b;
	FOR(i, 0, cnt) {
		U(curr[S[i].u], P[S[i].v].v);
		U(curr[S[i].v], P[S[i].u].v);
		swap(curr[S[i].u], curr[S[i].v]);

		if (i == cnt - 1) ans = max(ans, T[1].b);
		else if (S[i].y * S[i + 1].x != S[i + 1].y * S[i].x) ans = max(ans, T[1].b);
	}
	cout << ans;
	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...
#Verdict Execution timeMemoryGrader output
Fetching results...