제출 #1362378

#제출 시각아이디문제언어결과실행 시간메모리
1362378vladmart09Feast (NOI19_feast)C++20
18 / 100
58 ms2628 KiB
#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <random>
#include <queue>
#include <numeric>
#include <array>
#include <iomanip>
#include <stack>
#include <chrono>
#include <climits>
#include <bitset>

using namespace std;

using ll = long long;
using ld = long double;
using vd = vector<ld>;
using vi = vector<ll>;
using vii = vector<vi>;
using viii = vector<vii>;
using pi = pair<ll, ll>;
using vpi = vector<pi>;
using vb = vector<bool>;
using vs = vector<string>;

#define vec vector
#define cmax(x, ...) x = max({x, __VA_ARGS__})
#define cmin(x, ...) x = min({x, __VA_ARGS__})
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()

const ll N = 1e5 + 5, MOD = 998244353, INF = 1e18, K = 20;
ll B;

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

void solve() {
	ll n, k; cin >> n >> k;

	vi a(n + 1); for (ll i = 1; i <= n; i++) cin >> a[i];

	ll ans = 0;

	auto get = [&](ll m) -> pi {
		pi dp[2]; dp[0] = { 0, 0 }; dp[1] = { a[1] - m, 1 };
		for (ll i = 2; i <= n; i++) {
			pi nw[2];
			nw[0] = max(dp[0], dp[1]);

			nw[1] = max(make_pair(dp[1].first + a[i], dp[1].second),
				make_pair(dp[0].first + a[i] - m, dp[0].second + 1));

			swap(nw, dp);
		}

		return max(dp[0], dp[1]);
	};

	ll l = 0, r = 1e18;
	while (l <= r) {
		ll m = l + (r - l) / 2;

		if (get(m).second >= k) {
			l = m + 1;
		}
		else {
			r = m - 1;
		}
	}

	cout << get(r).first + k * r;
}

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

	long long tt = 1, _ = 1;
	//cin >> tt >> _;

	while (tt--) {
		solve();
		cout << '\n';
	}

	return 0;
}

/*


3 3
1 10 2
5 6 1
4 1 5
2 3 2
7 5 15
1 9 12



















Темы выучить(повторить):
1) квт
2) вайвлет три
3) 2сат
4)

*/
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…