萌新刚学OI,求助
查看原帖
萌新刚学OI,求助
222865
迟暮天复明心華楼主2025/6/12 14:47

我是想线段树分治然后遍历一遍线段树,每个位置上把这个节点里的线段插进凸包这样子,然后我发现我不会实现这个东西

但是我看题解里好像没有这么干的,我也看不懂题解具体是怎么实现的,还是说这个题有什么暴力方法然后复杂度是对的

我的代码长这样子

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我不会实现了,有没有大神给点高论这样子

2025/6/12 14:47
加载中...