以下这个代码:
pair<int,int> tree[4000010];
int get_wz(pair<int,int> line,int x) { return x*line.first+line.second; }
void upd(int now,int l,int r,pair<int,int> line)
{
if(tree[now].first==-1 || (get_wz(line,l)<=get_wz(tree[now],l) && get_wz(line,r)<=get_wz(tree[now],r))) return tree[now]=line,void();
if(get_wz(line,l)>=get_wz(tree[now],l) && get_wz(line,r)>=get_wz(tree[now],r)) return;
int mid=(l+r)>>1;
upd(now<<1,l,mid,line),upd(now<<1|1,mid+1,r,line);
}
我感觉复杂度是不对的,因为每一次都要递归两边。但是在很多题目中都不会挂。