我是想线段树分治然后遍历一遍线段树,每个位置上把这个节点里的线段插进凸包这样子,然后我发现我不会实现这个东西
但是我看题解里好像没有这么干的,我也看不懂题解具体是怎么实现的,还是说这个题有什么暴力方法然后复杂度是对的
我的代码长这样子
std::vector<pii>tree[2000010];
void modify(int p,int l,int r,int x,int y,pii k){ // 在线段树里插入线段
if(l>=x&&r<=y)return(void)(tree[p].pb(k));
int mid=l+r>>1;
if(x>=mid)modify(p<<1,l,mid,x,y,k);
if(y<mid)modify(p<<1|1,mid+1,r,x,y,k);
}
void insert(std::set<pii>&lines,pii L){} // 在凸包里插入线段
int query(std::set<pii>&lines,int Q){} // 在凸包里求解某一次询问
void query(int p,int l,int r,std::set<pii>lines){ // 遍历线段树
if(l==r){
if(op[l]==3){
if(lines.empty())puts("EMPTY SET");
else print(query(lines,Q[l]),'\n');
}
return;
}
for(auto L:tree[p])insert(lines,L);
int mid=l+r>>1;
query(p<<1,l,mid,lines);
query(p<<1|1,mid+1,r,lines);
}
就是我发现我的insert和query我不会实现了,有没有大神给点高论这样子