Submission #1179930

#TimeUsernameProblemLanguageResultExecution timeMemory
1179930NK_The Potion of Great Power (CEOI20_potion)C++17
38 / 100
3089 ms74356 KiB
// Success consists of going from failure to failure without loss of enthusiasm
#include <bits/stdc++.h>

using namespace std;

#define nl '\n'
#define pb push_back
#define sz(x) int(x.size())

#define f first
#define s second
#define mp make_pair

using pi = pair<int, int>;
template<class T> using V = vector<T>;
using vi = V<int>;
using vpi = V<pi>;

const int nax = (1 << 18);
const int INF = 1e9;
vpi seg[2 * nax];
	
int N, D; vi H;
void init(int n, int d, int h[]) {
	N = n, D = d; H = vi(N); 
	for(int i = 0; i < N; i++) H[i] = h[i];
	// cout << "INIT" << endl;
}

void ae(int x, pi e) {
	seg[x].pb(e);
	swap(e.f, e.s);
	seg[x].pb(e);
}

void add(int l, int r, const pi &e) {
	for(l += nax, r += nax + 1; l < r; l /= 2, r /= 2) {
		if (l & 1) ae(l++, e);
		if (r & 1) ae(--r, e);
	}
}

vi get(int p, int x) { 
	vi adj; for(p += nax; p; p /= 2) {
		int pos = lower_bound(begin(seg[p]), end(seg[p]), mp(x, -1)) - begin(seg[p]);
		while(pos < sz(seg[p])) {
			if (seg[p][pos].f == x) adj.pb(H[seg[p][pos].s]);
			pos++;
		}
	}

	return adj;
}

void curseChanges(int m, int a[], int b[]) {
	map<pi, int> L;
	for(int i = 0; i < m; i++) {
		pi e = minmax(a[i], b[i]);
		if (L.find(e) == L.end()) L[e] = i + 1;
		else {
			add(L[e], i, e);
			L.erase(e);
		}
	}

	for(auto& e : L) {
		add(e.s, m, e.f);
	}

	for(int i = 1; i < 2 * nax; i++) sort(begin(seg[i]), end(seg[i]));
	
	// cout << "UPDATES" << endl;
}

int question(int x, int y, int v) {
	// cout << "QRY: " << x << " " << y << " " << v << endl;
	vi hx = get(v, x), hy = get(v, y);
	sort(begin(hx), end(hx)); sort(begin(hy), end(hy));
	
	// for(auto& h : hx) cout << h << " ";
	// cout << endl;

	// for(auto& h : hy) cout << h << " ";
	// cout << endl;

	int ans = INF;
	for(int i = 0, j = 0; i < sz(hx); i++) {
		while(j < sz(hy) && hx[i] > hy[j]) j++;
		if (j < sz(hy)) ans = min(ans, hy[j] - hx[i]);
		if (j) ans = min(ans, hx[i] - hy[j - 1]);
	}

	return ans;
}

// Breathe In, Breathe Out
#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...