Submission #1294906

#TimeUsernameProblemLanguageResultExecution timeMemory
1294906kian2009Sparklers (JOI17_sparklers)C++20
0 / 100
1 ms576 KiB
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

const int MAXN = 1e5 + 10;

ll n, k, t, x[MAXN], pt1, pt2, pt3, pt4, sum1, sum2, sum;
vector<ll> h1, h2;

void input() {
	cin >> n >> k >> t;
	--k;
	for (int i = 0; i < n; i++)
		cin >> x[i];	
}

void setup(ll s) {
	pt1 = pt2 = pt3 = pt4 = sum = sum1 = sum2 = 0;
	h1.clear();
	h2.clear();
	for (int i = k; i > 0; i--)
		h1.push_back(x[i] - x[i - 1] - s);
	for (int i = k + 1; i < n; i++)
		h2.push_back(x[i] - x[i - 1] - s);
}

void move() {
	while (pt3 < h1.size() && (sum >= sum1 && sum1 >= 0)) {
		sum1 += h1[pt3];
		pt3++;
	}
	while (pt4 < h2.size() && (sum >= sum2 && sum2 >= 0)) {
		sum2 += h2[pt4];
		pt4++;	
	}
}

bool check(ll s) {
	setup(s);
	while (pt1 < h1.size() || pt2 < h2.size()) {
		move();
		//cerr << pt1 << " , " << pt3 << " ::: " << pt2 << " , " << pt4 << " ::: " << sum << endl;
		if (pt1 != h1.size() && (sum >= sum1 && sum1 < 0)) {
			sum -= sum1;
			sum1 = 0;
			pt1 = pt3;
			continue;	
		}
		if (pt2 != h2.size() && (sum >= sum2 && sum2 < 0)) {
			sum -= sum2;
			sum2 = 0;
			pt2 = pt4;
			continue;
		}
		if ((pt1 != h1.size() && sum < sum1) || (pt2 != h2.size() && sum < sum2))
			return false;
		return (sum >= sum1 + sum2);
	}
	return true;
}

ll findAns() {
	ll l = -1, r = x[n - 1];
	while (r - l > 1) {
		ll mid = (l + r) / 2;
		if (check(2 * mid * t))
			r = mid;
		else
			l = mid;
	}
	return r;
}

int main() {
	ios::sync_with_stdio(false); cin.tie(0);
	input();
	cout << findAns() << endl;
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...