比赛 Asm.Def战记之圣地亚哥“杯2015 评测结果 AAAAAAAWWW
题目名称 Asm.Def的命令 最终得分 70
用户昵称 fyb 运行时间 0.691 s
代码语言 C++ 内存使用 4.38 MiB
提交时间 2015-10-31 11:21:42
显示代码纯文本
#include <cstdio>

using namespace std;

#define NMAX 100000
#define mid(l,r) (((l)+(r))/2)

struct pos{
	double x,y;

	bool operator ! ()const{return (x==0&&y==0);}
	pos operator + (const pos b)const{return (pos){x+b.x,y+b.y};}
	pos operator +=(const pos b){*this=*this+b;}
};

struct node{
	int l,r;
	pos lazy;
};

int pf=0;
node tree[NMAX*2];

void push_down(int tn){
	tree[tree[tn].l].lazy+=tree[tn].lazy;
	tree[tree[tn].r].lazy+=tree[tn].lazy;
	tree[tn].lazy=(pos){0,0};
}

int create(int l,int r){
	int tn;

	tn=pf++;
	if(l!=r){
		tree[tn].l=create(l,mid(l,r));
		tree[tn].r=create(mid(l,r)+1,r);
	}
	return tn;
}

void update(int tn,int l,int r,int a,int b,pos d){
	if(l>=a&&r<=b)tree[tn].lazy+=d;
	else{
		if(!(!tree[tn].lazy))push_down(tn);
		if(a<=mid(l,r))update(tree[tn].l,l,mid(l,r),a,b,d);
		if(b>mid(l,r))update(tree[tn].r,mid(l,r)+1,r,a,b,d);
	}
}

pos query(int tn,int l,int r,int a){
	if(l==r)return tree[tn].lazy+(pos){0,l};
	else{
		if(!(!tree[tn].lazy))push_down(tn);
		if(a<=mid(l,r))return query(tree[tn].l,l,mid(l,r),a);
		else return query(tree[tn].r,mid(l,r)+1,r,a);
	}
}

int main(){
	int n,q;
	int rt;
	int tt,ta,tb,tx,ty;
	pos tp;
	int i;

	freopen("asm_command.in","r",stdin);
	freopen("asm_command.out","w",stdout);

	scanf("%d%d",&n,&q);
	rt=create(1,n);

	for(i=0;i<q;i++){
		scanf("%d",&tt);
		if(tt==0){
			scanf("%d",&ta);
			tp=query(rt,1,n,ta);
			printf("%.1lf %.1lf\n",tp.x,tp.y);
		}else if(tt==1){
			scanf("%d%d%d%d",&ta,&tb,&tx,&ty);
			update(rt,1,n,ta,tb,(pos){tx,ty});
		}else printf("WOCAO,WO BU HUI!!!\n");
	}
	return 0;
}