Atlantis POJ - 1151 参考代码C++

Atlantis POJ - 1151 参考代码C++,第1张

#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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/562314.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-01
下一篇 2022-04-01

发表评论

登录后才能评论

评论列表(0条)