Submission #2472815


Source Code Expand

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
const int N = 4005;
const ll INF = 1e18;

int n, T;
ll dp[N][N];

struct ConvexHullTrick {
	struct line {
		ll a; ll b;
		line(ll a = 0, ll b = 0) : a(a), b(b) {}
	};

	bool bad(line l1, line l2, line l3) {
		// intersection(l1, l3) < intersection(l1, l2)
		return 1LL * (l1.b - l3.b) * (l2.a - l1.a) < 1LL * (l3.a - l1.a) * (l1.b - l2.b);
	}

	vector <line> L;
	void add(line d) {
		// d is added according to the increasing order of f[]
		if (!L.empty() && L.back().a == d.a) {
			if (L.back().b < d.b) return; // d is not optimal
			else L.pop_back(); // L.back() is not optimal anymore
		}
		while(L.size() >= 2 && bad(L[(int) L.size() - 2], L[(int) L.size() - 1], d)) {
			L.pop_back();
		}
		L.push_back(d);
	}

	ll get(ll x) { // x is increasing
		if (L.empty()) return INF;
		while(L.size() >= 2 && 1LL * L[0].a * x + L[0].b >= 1LL * L[1].a * x + L[1].b) {
			L.erase(L.begin());
		}
		return 1LL * L[0].a * x + L[0].b;
	}
} cvh[N];

struct song {
	int t; int p; int f;
	inline bool operator < (const song &other) const {
		return f < other.f;
	}
} a[N];

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);

	cin >> n >> T;
	for (int i = 1; i <= n; ++i) {
		cin >> a[i].t >> a[i].p >> a[i].f;
	}
	sort(a + 1, a + n + 1);

	for (int i = 1; i <= n; ++i) {
		for (int t = 0; t <= T; ++t) {
			dp[i][t] = -INF;
		}
	}

	for (int i = 1; i <= n; ++i) {
		for (int t = a[i].t; t <= T; ++t) {
			if (t == a[i].t) {
				dp[i][t] = a[i].p;
				continue;
			}

			ll g = cvh[t - a[i].t].get(2LL * a[i].f);
			if (g == INF) continue;
			
			dp[i][t] = -g + a[i].p - 1LL * a[i].f * a[i].f;
			//cerr << i << ' ' << t << ' ' << dp[i][t] << endl;
		}

		for (int t = a[i].t; t <= T; ++t) {
			if (dp[i][t] != -INF) {
				cvh[t].add({(ll)-a[i].f, 1LL * a[i].f * a[i].f - dp[i][t]});
			}
		}
	}

	ll res = -INF;
	for (int t = 1; t <= T; ++t) {
		for (int i = 1; i <= n; ++i) {
			res = max(res, dp[i][t]);
		}
	}

	printf("%lld\n", res);
}

Submission Info

Submission Time
Task I - Live Programming
User cheater2k
Language C++14 (GCC 5.4.1)
Score 100
Code Size 2105 Byte
Status AC
Exec Time 278 ms
Memory 125056 KB

Judge Result

Set Name All
Score / Max Score 100 / 100
Status
AC × 79
Set Name Test Cases
All 00_sample_00, 00_sample_01, 00_sample_02, 00_sample_03, 00_sample_04, 01_rando_medium_031, 01_rando_medium_035, 01_rando_medium_160, 01_rando_medium_278, 01_rando_medium_337, 01_rando_medium_342, 01_rando_medium_355, 01_rando_medium_452, 01_rando_medium_467, 01_rando_medium_665, 02_rando_large_000, 02_rando_large_013, 02_rando_large_048, 02_rando_large_054, 02_rando_large_083, 02_rando_large_147, 02_rando_large_164, 02_rando_large_227, 02_rando_large_283, 02_rando_large_336, 02_rando_large_368, 05_attack_00, 05_attack_01, 05_attack_mi0803_00, 10_random_small_000, 10_random_small_001, 10_random_small_002, 10_random_small_003, 10_random_small_004, 10_random_small_005, 10_random_small_006, 10_random_small_007, 10_random_small_008, 10_random_small_009, 11_rando_medium_000, 11_rando_medium_001, 11_rando_medium_002, 11_rando_medium_003, 11_rando_medium_004, 11_rando_medium_005, 11_rando_medium_006, 11_rando_medium_007, 11_rando_medium_008, 11_rando_medium_009, 12_random_large_000, 12_random_large_001, 12_random_large_002, 12_random_large_003, 12_random_large_004, 12_random_large_005, 12_random_large_006, 12_random_large_007, 12_random_large_008, 12_random_large_009, 22_shortMusics_Large_000, 22_shortMusics_Large_001, 22_shortMusics_Large_002, 22_shortMusics_Large_003, 22_shortMusics_Large_004, 22_shortMusics_Large_005, 22_shortMusics_Large_006, 22_shortMusics_Large_007, 22_shortMusics_Large_008, 22_shortMusics_Large_009, 41_separate_medium_000, 41_separate_medium_001, 41_separate_medium_002, 41_separate_medium_003, 41_separate_medium_004, 42_separate_large_000, 42_separate_large_001, 42_separate_large_002, 42_separate_large_003, 42_separate_large_004
Case Name Status Exec Time Memory
00_sample_00 AC 1 ms 384 KB
00_sample_01 AC 1 ms 384 KB
00_sample_02 AC 1 ms 384 KB
00_sample_03 AC 1 ms 384 KB
00_sample_04 AC 1 ms 384 KB
01_rando_medium_031 AC 1 ms 512 KB
01_rando_medium_035 AC 2 ms 2688 KB
01_rando_medium_160 AC 1 ms 512 KB
01_rando_medium_278 AC 2 ms 2688 KB
01_rando_medium_337 AC 1 ms 512 KB
01_rando_medium_342 AC 2 ms 2688 KB
01_rando_medium_355 AC 1 ms 512 KB
01_rando_medium_452 AC 2 ms 2688 KB
01_rando_medium_467 AC 2 ms 2688 KB
01_rando_medium_665 AC 1 ms 640 KB
02_rando_large_000 AC 17 ms 68224 KB
02_rando_large_013 AC 3 ms 6784 KB
02_rando_large_048 AC 6 ms 21248 KB
02_rando_large_054 AC 22 ms 88832 KB
02_rando_large_083 AC 15 ms 60032 KB
02_rando_large_147 AC 2 ms 2688 KB
02_rando_large_164 AC 22 ms 88832 KB
02_rando_large_227 AC 22 ms 90880 KB
02_rando_large_283 AC 29 ms 119552 KB
02_rando_large_336 AC 25 ms 107264 KB
02_rando_large_368 AC 18 ms 72320 KB
05_attack_00 AC 2 ms 2688 KB
05_attack_01 AC 1 ms 640 KB
05_attack_mi0803_00 AC 1 ms 384 KB
10_random_small_000 AC 1 ms 384 KB
10_random_small_001 AC 1 ms 384 KB
10_random_small_002 AC 1 ms 384 KB
10_random_small_003 AC 1 ms 384 KB
10_random_small_004 AC 1 ms 384 KB
10_random_small_005 AC 1 ms 384 KB
10_random_small_006 AC 1 ms 384 KB
10_random_small_007 AC 1 ms 384 KB
10_random_small_008 AC 1 ms 384 KB
10_random_small_009 AC 1 ms 384 KB
11_rando_medium_000 AC 1 ms 512 KB
11_rando_medium_001 AC 1 ms 640 KB
11_rando_medium_002 AC 1 ms 512 KB
11_rando_medium_003 AC 2 ms 2688 KB
11_rando_medium_004 AC 1 ms 640 KB
11_rando_medium_005 AC 1 ms 512 KB
11_rando_medium_006 AC 2 ms 2688 KB
11_rando_medium_007 AC 1 ms 384 KB
11_rando_medium_008 AC 2 ms 2688 KB
11_rando_medium_009 AC 1 ms 512 KB
12_random_large_000 AC 93 ms 73856 KB
12_random_large_001 AC 87 ms 55936 KB
12_random_large_002 AC 222 ms 117888 KB
12_random_large_003 AC 15 ms 12664 KB
12_random_large_004 AC 144 ms 125056 KB
12_random_large_005 AC 36 ms 28928 KB
12_random_large_006 AC 166 ms 99072 KB
12_random_large_007 AC 10 ms 8832 KB
12_random_large_008 AC 73 ms 41728 KB
12_random_large_009 AC 79 ms 73600 KB
22_shortMusics_Large_000 AC 155 ms 78336 KB
22_shortMusics_Large_001 AC 141 ms 98304 KB
22_shortMusics_Large_002 AC 254 ms 123520 KB
22_shortMusics_Large_003 AC 278 ms 119552 KB
22_shortMusics_Large_004 AC 204 ms 110848 KB
22_shortMusics_Large_005 AC 252 ms 111360 KB
22_shortMusics_Large_006 AC 174 ms 76416 KB
22_shortMusics_Large_007 AC 215 ms 88960 KB
22_shortMusics_Large_008 AC 114 ms 85888 KB
22_shortMusics_Large_009 AC 151 ms 74368 KB
41_separate_medium_000 AC 1 ms 640 KB
41_separate_medium_001 AC 2 ms 2688 KB
41_separate_medium_002 AC 2 ms 2688 KB
41_separate_medium_003 AC 2 ms 2688 KB
41_separate_medium_004 AC 2 ms 2688 KB
42_separate_large_000 AC 58 ms 93696 KB
42_separate_large_001 AC 70 ms 71936 KB
42_separate_large_002 AC 54 ms 69504 KB
42_separate_large_003 AC 95 ms 114688 KB
42_separate_large_004 AC 67 ms 75904 KB