Submission #952899

# Submission time Handle Problem Language Result Execution time Memory
952899 2024-03-25T04:48:26 Z tacocat The short shank; Redemption (BOI21_prison) C++14
0 / 100
827 ms 31948 KB
/*
*       ___
*   _ /    _\_
*  / |    |___|
*  | |       |
*  \_|   __  |
*     \_/  \_/
*   uwu amogus
*/
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
 
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 0x7FFFFFFF
#define llinf 0x7FFFFFFFFFFFFFFF
#define ff first
#define ss second
#define FOR(i, a, b) for(int i = a; i < b; i++)
#define ROF(i, a, b) for(int i = a - 1; i >= b; i--)
//#define assert void
//#pragma GCC optimize("O3")
//#pragma GCC optimize("unroll-loops")
//#define int ll
struct dsu {
	dsu(int n) {
		p.resize(n, -1);
		pp.resize(n); for (int i = 0; i < n; i++) pp[i] = i;
		r.resize(n, 0);
	}
	inline int par(int x) {
		return pp[_par(x)];
	}
	inline int _par(int x) {
		return p[x] == -1 ? x : p[x] = _par(p[x]);
	}
	inline void merge(int a, int b) {
		a = _par(a); b = _par(b);
		if (a == b)return;
		if (r[a] < r[b]) {
			swap(a, b);
			swap(pp[a], pp[b]);
		}
		if (r[a] == r[b]) r[a]++;
		p[b] = a;
	}
	vector<int> p, r, pp;
};
 
signed main() {
  ios_base::sync_with_stdio(false); cin.tie(NULL);
	int N, D, T; cin >> N >> D >> T;
	vector<int> t(N); for (auto& x : t) cin >> x;
	double l = 0, r = 2e6, m = 0;
	int ans = 0;
	for (int _ = 0; _ < 33; _++) {//aliens HAHAHAhaha ha ha :sob:
		m = (l + r) / 2;
        pair<int,int> st[N];
        int ii = 0;
		struct node {
			int p = -1;//prev
			int n = -1;//next
			int lz = 0;
			double v = 0;
			int c = 0; // count owo!!!
			node() {};
			node(double v, int c) : v(v), c(c) {};
		};
		vector<node> st2; st2.reserve(N);
		dsu pls(N);
		int start = 0; 
		int amt = 0;//amount added
		function<void(int)> kill = [&](int i) {
			int n = st2[i].n;
			//assert(n != -1); 
			if (n == -1) return;
			if ((st2[i].v + (double)st2[i].lz > st2[n].v)) {
				int p = st2[i].p;
				st2[n].p = p;
				if (p != -1) {
					st2[p].lz += st2[i].lz;
					st2[p].n = n;
					pls.merge(p, i); //merge i to p
					kill(p);
				}
				else {
					// DEAD
					amt -= st2[i].lz; //recycle owo
					start = n;
				}
			}
		};
		for (int i = 0; i < N; i++) {
			//create and then upd
			if (st2.size()) {
				st2.push_back(node(st2[start].v + (double)amt + m, st2[start].c+1));
				st2[i - 1].n = i; st2[i].p = i - 1;
				kill(i - 1);
			}
			else {
				st2.push_back(node());
			}
 
			int o = i;
			if (t[i] <= T) {
				while (ii && st[ii - 1].ff >= t[i] - i) {
					--ii;
				}
				st[ii++] = { t[i] - i, i};
			}
			else {
				while (ii && st[ii].ff > T - i) --ii;
				if (ii) {
					o = st[ii - 1].ss;
				}
				else o = -1;
			}
			//cout << o << ",";
			if(o >= start){
				int t = pls.par(o);
				st2[t].lz++; amt++;
				kill(t);
			}
			//cout << amt << ",";
		}
		//cout << endl;
		int c = st2[start].c;
		//cout << c << endl;
		if (c <= D) {
			r = m;
			ans = round((double)st2[start].v + (double)amt - (double)D * m);
		}
		else {
			//cout << "fuck" << endl;
			l = m;
		}
	}
	cout << ans << endl;
	// n log n inverse ackermann n please pass i swear to god
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Incorrect 1 ms 348 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 827 ms 27840 KB Output is correct
3 Correct 781 ms 28008 KB Output is correct
4 Correct 749 ms 31948 KB Output is correct
5 Incorrect 719 ms 27976 KB Output isn't correct
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Incorrect 1 ms 348 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 111 ms 4540 KB Output is correct
3 Correct 118 ms 4552 KB Output is correct
4 Correct 74 ms 4540 KB Output is correct
5 Correct 65 ms 7608 KB Output is correct
6 Correct 63 ms 6844 KB Output is correct
7 Incorrect 49 ms 6748 KB Output isn't correct
8 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Incorrect 1 ms 348 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Incorrect 1 ms 348 KB Output isn't correct
4 Halted 0 ms 0 KB -