Submission #1296122

#TimeUsernameProblemLanguageResultExecution timeMemory
1296122SabaKharebavaObstacles for a Llama (IOI25_obstacles)C++20
37 / 100
71 ms8192 KiB
#include<bits/stdc++.h>

using namespace std;

vector<int> mp, mp1;
vector<bool> isolated;

void initialize(vector<int> t, vector<int> h) {
	mp.resize(h.size()+1, 0);
	mp1.resize(h.size()+1, 0);
	for (int i = 1; i <= h.size(); i++) {
		if (h[i-1] >= t.back())
			mp[i] = 1;
		if (h[i-1] >= t[0])
			mp1[i] = 1;
		mp[i] += mp[i-1];
		mp1[i] += mp1[i-1];
	}
	auto propagate = [&](int ind) {
		int i = ind;
		while (i >= 0 && t[0] > h[i]) {
			isolated[i] = false;
			i--;
		}
		i = ind;
		while (i < h.size() && t[0] > h[i]) {
			isolated[i] = false;
			i++;
		}
	};
	isolated.resize(h.size(), true);
	for (int i = 0; i < h.size(); i++) {
		if (isolated[i] && h[i] < t[1] && t[0] > h[i]) {
			propagate(i);
		}
	}
}

bool can_reach(int l, int r, int s, int d) {
	if (d < s)
		swap(d, s);
	
	if ((mp[d+1]-mp[s]) > 0)
		return false;
	if (!(mp1[d+1]-mp1[s]))
		return true;

	return !(isolated[s] || isolated[d]);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...