LineContainer
Authors: Benjamin Qi, Andi Qu
Convex Containers
Half-Plane Intersection
Resources | ||||
---|---|---|---|---|
CF | ||||
Petr | Expected linear time! |
This section is not complete.
Status | Source | Problem Name | Difficulty | Tags | |
---|---|---|---|---|---|
Kattis | Normal | ||||
JOI | Hard | ||||
Balkan OI | Very Hard | Show TagsBinary Search, Geometry |
CHT)
LineContainer (akaStatus | Source | Problem Name | Difficulty | Tags | |
---|---|---|---|---|---|
YS | Normal |
Resources | ||||
---|---|---|---|---|
KACTL | source of code that I (Ben) use | |||
cp-algo | related topic (but not the same) |
Example Problem
Focus Problem – try your best to solve this problem before continuing!
Analysis
Instead of focusing on the pillars that should be destroyed, let's instead focus on the pillars that remain.
The total cost consists of the cost due to height differences plus the cost of destroying unused pillars. The latter cost is equal to the cost to destroy all pillars minus the cost to destroy the remaining pillars.
Since the cost to destroy all pillars is constant, we can thus turn the problem into one about building pillars instead of destroying them!
From this, we get a basic DP recurrence. Let be the minimum cost to build the bridge so that the last build pillar is pillar .
and the following recurrence holds:
Notice how
effectively describes a linear function , where , , and
This means that we can use CHT to compute efficiently!
However, since is not monotonic, we can't use linear CHT using a deque, so we must settle with .
I implemented CHT using a std::set
here, but other implementations using
things like the Li-Chao tree should work similarly.
#include <bits/stdc++.h>typedef long long ll;using namespace std;struct Line {bool type;double x;ll m, c;};
Problems
Status | Source | Problem Name | Difficulty | Tags | |
---|---|---|---|---|---|
YS | Normal | ||||
POI | Normal | Show TagsConvex, DP | |||
CEOI | Hard | Show TagsConvex, DP | |||
FHC | Hard | Show TagsConvex, DP | |||
AC | Hard | ||||
TLX | Hard | ||||
Old Gold | Hard |
Module Progress:
Join the USACO Forum!
Stuck on a problem, or don't understand a module? Join the USACO Forum and get help from other competitive programmers!