删除算法:从tree[p]中删除line[i] 如果tree[p]完全被line[i]覆盖,从树根中删除。 再考虑从左子树与又子树中删除。 同时记录跟节点需要更新。

更新算法:更新树tree[p] 若tree被完全覆盖(count>0) 则 len=tree[p]的代表的线段的长度

否则

初始ans=0(周长); 每次插入或者删除线段line[i]时,同时计算ans的增长。具体如下: ans+=tree[1].lines*2*(x[i+1]-x[i1]) ans+=2*(更新信息前后,tree[1]中测度差的绝对值) */ #include <iostream> #include <vector> #include <algorithm> #include <cmath> using namespace std; const int N=20000; struct Line //表示平行与y轴的边 {

}; struct Node//线段树的节点 { // int l,r;

}; Node tree[4*N]; Line line[2*N]; int x[2*N],y[2*N];//x,y轴上的分割点, int n; void Build(int p,int left,int right)//left,right为y轴上分割点的下标 {

} void Insert(int p,int l,int r,int y1,int y2) {

} void Delete(int p,int l,int r,int y1,int y2) {

} void Update(int p,int l,int r) {

} void Init() {

} void Solve() {

} int main() {

}

ch3n2k.com | Copyright (c) 2004-2020 czk.