比赛 |
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;
}