写 P2305。我寻思着封装一个 Segment 结构体,再用 vector 实现动态开点,得多舒服啊!
于是:(仅展示部分代码)
struct Node {Seg sg;int lson,rson;};
int tot=0,rt=0; vector<Node> t;
void insert(int& u,int l,int r,Seg sg) {
if(!u) return t.push_back({sg,0,0}),u=++tot,void();
if(l==r) {
if(sg.f(l)<t[u].sg.f(l)) swap(sg,t[u].sg);
return ;
}
if(sg.f(mid)<t[u].sg.f(mid)) swap(sg,t[u].sg);
if(sg.k<t[u].sg.k) insert(t[u].rson,mid+1,r,sg);
else insert(t[u].lson,l,mid,sg);
return ;
}
怎么都调不过去,然后再倒数第三行处加了个 assert(t[u].lson);,发现 RE 了???
后来想到 vector 会动态更新内存。插入一个数之后这个地址直接作废了。
你妈的。