#include
#include
#include
using namespace std;
const int maxn=2e5+10;
struct node {
int Left,Right,lazy;
double val;
}NODE[maxn<<2];
double pos[maxn];
void PushUp(int idx) {
if (NODE[idx].lazy) NODE[idx].val=pos[NODE[idx].Right]-pos[NODE[idx].Left-1];
else NODE[idx].val=NODE[idx<<1].val+NODE[idx<<1|1].val;
}
void Updata(int l, int r, int c, int idx) {
if (NODE[idx].Left==l&&NODE[idx].Right==r) {
NODE[idx].lazy+=c;
if (l==r) {
if (NODE[idx].lazy) NODE[idx].val=pos[r]-pos[l-1];
else NODE[idx].val=0;
} else PushUp(idx);
return;
}
int m=(NODE[idx].Left+NODE[idx].Right)>>1;
if (r<=m) Updata(l,r,c,idx<<1);
else if (l>m) Updata(l,r,c,idx<<1|1);
else {
Updata(l,m,c,idx<<1);
Updata(m+1,r,c,idx<<1|1);
}
PushUp(idx);
}
void build(int l, int r, int idx) {
NODE[idx].Left=l,NODE[idx].Right=r;
NODE[idx].val=NODE[idx].lazy=0;
if (l==r) return;
int m=(l+r)>>1;
build(l,m,idx<<1);
build(m+1,r,idx<<1|1);
}
struct edge {
double x1,x2,y;
int tem;
bool operator< (const edge& n) const {
return y
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)