Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int val[mx];
- const int maxn = mx;
- typedef int ftype;
- typedef complex<ftype> point;
- #define x real
- #define y imag
- ftype dot(point a, point b) {
- return (conj(a) * b).x();
- }
- ftype f(point a, ftype x) {
- return dot(a, {x, 1});
- }
- point line[5 * maxn];
- void add_line(point nw, int v = 1, int l = 0, int r = maxn) {
- int m = (l + r) / 2;
- bool lef = f(nw, val[l]) < f(line[v], val[l]);
- bool mid = f(nw, val[m]) < f(line[v], val[m]);
- if(mid) {
- swap(line[v], nw);
- }
- if(r - l == 1) {
- return;
- } else if(lef != mid) {
- add_line(nw, 2 * v, l, m);
- } else {
- add_line(nw, 2 * v + 1, m, r);
- }
- }
- int get(int x, int v = 1, int l = 0, int r = maxn) {
- int m = (l + r) / 2;
- if(r - l == 1) {
- return f(line[v], x);
- } else if(x < val[m]) {
- return min(f(line[v], x), get(x, 2 * v, l, m));
- } else {
- return min(f(line[v], x), get(x, 2 * v + 1, m, r));
- }
- }
- void init(){
- int mm = inf;
- for(int i=0;i<5*maxn;i++){
- line[i] = {0, mm};
- }
- for(int i=0;i<maxn;i++){
- val[i] = mod;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement