답안 #433955

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
433955 2021-06-20T12:40:17 Z Azimjon 3단 점프 (JOI19_jumps) C++17
5 / 100
4000 ms 119188 KB
#pragma GCC target("avx2")
#pragma GCC optimization("O3")
#pragma GCC optimization("unroll-loops")
// Muallif: Azimjon Mehmonali o'g'li

#include <bits/stdc++.h>

using namespace std;

// #define int long long

const long double PI = 3.1415926535897;
const int mod = 1000000007LL;
const int INF = 1e18;

const int N = 5005;

int a[N], b[N], t[4 * N];
long long dp[N][N];
int n;

void build(int v = 1, int tl = 1, int tr = n) {
	if (tl == tr) {
		t[v] = a[tl];
		return;
	}

	int tm = (tl + tr) / 2;

	build(v + v, tl, tm);
	build(v + v + 1, tm + 1, tr);

	t[v] = max(t[v + v], t[v + v + 1]);
}

int get(int l, int r, int v = 1, int tl = 1, int tr = n) {
	if (r < tl || tr < l) return 0;

	if (l <= tl && tr <= r) {
		return t[v];
	}

	int tm = (tl + tr) / 2;

	return max(get(l, r, v + v, tl, tm), get(l, r, v + v + 1, tm + 1, tr));
}

signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> n;

	for (int i = 1; i <= n; i++) {
		cin >> a[i];
		b[i] = a[i];
	}

	build();

	int q;
	cin >> q;

	function<int(int, int, int)> f = [&](int l, int r, int first) {
		// cerr << l << " " << r << endl;
		// if (r - l + 1 <= 2) return 0ll;
		vector<pair<int, int>> v;
		for (int i = l; i <= r; i++) {
			v.emplace_back(a[i], i);
		}

		sort(v.rbegin(), v.rend());

		int tl = v[0].second, tr = v[1].second;

		if (tl > tr) {
			swap(tl, tr);
		}

		int re = 0;

		for (int i = 1; i <= n; i++) {
			vector<int> d{tl, tr, i};
			sort(d.begin(), d.end());
			if (i == tl || i == tr || l > i || i > r
				|| d[2] - d[1] < d[1] - d[0])
				continue;

			re = max(re, a[i]);
		}

		int ans = v[0].first + v[1].first + re;

		if (!first) return ans;

		a[v[0].second] = 0;
		ans = max(ans, f(l, r, first - 1));

		a[v[1].second] = 0;
		ans = max(ans, f(l, r, first - 1));

		a[v[0].second] = b[v[0].second];
		a[v[1].second] = b[v[1].second];
		return ans;
	};

	function<long long(int, int)> ff = [&](int l, int r) {
		if (r - l + 1 <= 2) return 0ll;

		if (dp[l][r] != 0) return dp[l][r];

		long long ans = 1ll * a[l] + a[r] + get(l + 1, (l + r) / 2);

		ans = max(ans, ff(l, r - 1));
		ans = max(ans, ff(l + 1, r));

		dp[l][r] = ans;

		return dp[l][r];
	};

	ff(1, n);

	while (q--) {
		int l, r;
		cin >> l >> r;

		cout << ff(l, r) << endl;
	}

	return 0;
}

Compilation message

jumps.cpp:3: warning: ignoring '#pragma GCC optimization' [-Wunknown-pragmas]
    3 | #pragma GCC optimization("O3")
      | 
jumps.cpp:4: warning: ignoring '#pragma GCC optimization' [-Wunknown-pragmas]
    4 | #pragma GCC optimization("unroll-loops")
      | 
jumps.cpp:15:17: warning: overflow in conversion from 'double' to 'int' changes value from '1.0e+18' to '2147483647' [-Woverflow]
   15 | const int INF = 1e18;
      |                 ^~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 332 KB Output is correct
2 Correct 2 ms 716 KB Output is correct
3 Correct 2 ms 716 KB Output is correct
4 Correct 2 ms 760 KB Output is correct
5 Correct 1 ms 716 KB Output is correct
6 Correct 2 ms 716 KB Output is correct
7 Correct 2 ms 716 KB Output is correct
8 Correct 2 ms 716 KB Output is correct
9 Correct 2 ms 716 KB Output is correct
10 Correct 2 ms 716 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 332 KB Output is correct
2 Correct 2 ms 716 KB Output is correct
3 Correct 2 ms 716 KB Output is correct
4 Correct 2 ms 760 KB Output is correct
5 Correct 1 ms 716 KB Output is correct
6 Correct 2 ms 716 KB Output is correct
7 Correct 2 ms 716 KB Output is correct
8 Correct 2 ms 716 KB Output is correct
9 Correct 2 ms 716 KB Output is correct
10 Correct 2 ms 716 KB Output is correct
11 Execution timed out 4094 ms 119188 KB Time limit exceeded
12 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 10 ms 492 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 332 KB Output is correct
2 Correct 2 ms 716 KB Output is correct
3 Correct 2 ms 716 KB Output is correct
4 Correct 2 ms 760 KB Output is correct
5 Correct 1 ms 716 KB Output is correct
6 Correct 2 ms 716 KB Output is correct
7 Correct 2 ms 716 KB Output is correct
8 Correct 2 ms 716 KB Output is correct
9 Correct 2 ms 716 KB Output is correct
10 Correct 2 ms 716 KB Output is correct
11 Execution timed out 4094 ms 119188 KB Time limit exceeded
12 Halted 0 ms 0 KB -