CSES - Esimerkki-implementaatio
struct Line {
	ll a, b;
	ll eval(ll x) const { return a*x + b; }
};
class LiChao {
	private:
		const static ll INF = 4e18;
		vector<Line> tree; // Tree of lines
		vector<ll> xs; // x-coordinate of point i
		int k = 1; // Log-depth of the tree

		int mapInd(int j) const {
			int z = __builtin_ctz(j);
			return ((1<<(k-z)) | (j>>z)) >> 1;
		}
		bool comp(const Line& a, int i, int j) const {
			return a.eval(xs[j]) < tree[i].eval(xs[j]);
		}
	public:
		LiChao(const vector<ll>& points) {
			while(points.size() >> k) ++k;
			tree.resize(1 << k, {0, INF});
			xs.resize(1 << k, points.back());
			for (int i = 0; i < points.size(); ++i) xs[mapInd(i+1)] = points[i];
		}
		void addLine(Line line) {
			for (int i = 1; i < tree.size();) {
				if (comp(line, i, i)) swap(line, tree[i]);
				if (line.a > tree[i].a) i = 2*i;
				else i = 2*i+1;
			}
		}
		ll minVal(int j) const {
			j = mapInd(j+1);
			ll res = INF;
			for (int i = j; i > 0; i /= 2) res = min(res, tree[i].eval(xs[j]));
			return res;
		}
};

Tässä mapInd-funktio kuvaa indeksit sijainteihin puussa. Jos puun koko on 77, ja arvot xx ovat 1,2,,71, 2, \dots, 7, puun indeksointi on seuraava

ja arvot xx sen solmuissa ovat seuraavat

Toinen, segmenttipuutyylinen toteutus:

const int N = 1<<20;
const ll INF = 4e18;
struct Line {
	// Nämä voi usein tallentaa intteinä, mutta tällöin
	// "ääretön" suora pitää toteuttaa varovasti.
	ll k, c=INF;
	ll operator()(ll x) {
		return k*x + c;
	}
} lct[2*N];
Line lc_get(int p, int cn=1, int x=0, int y=N-1) {
	if (x == y) return lct[cn];
	int m = (x+y)/2;
	Line got;
	if (p <= m) got = lc_get(p, 2*cn, x, m);
	else got = lc_get(p, 2*cn+1, m+1, y);
	if (lct[cn](p) < got(p)) return lct[cn];
	else return got;
}
void lc_add(Line nw, int cn=1, int x=0, int y=N-1) {
	Line &old = lct[cn];
	int m = (x+y)/2;
	bool better_x = nw(x) < old(x);
	bool better_m = nw(m) < old(m);
	if (better_m) swap(old, nw);
	if (x != y) {
		if (better_x != better_m) {
			lc_add(nw, 2*cn, x, m);
		} else {
			lc_add(nw, 2*cn+1, m+1, y);
		}
	}
}