比赛 |
Asm.Def战记之圣地亚哥“杯2015 |
评测结果 |
AAAAAAAEEE |
题目名称 |
Asm.Def的命令 |
最终得分 |
70 |
用户昵称 |
真香警告 |
运行时间 |
0.651 s |
代码语言 |
C++ |
内存使用 |
82.33 MiB |
提交时间 |
2019-10-23 17:43:50 |
显示代码纯文本
#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=1000100;
int n,q;
int cnt;
struct tree{
int x;
int y;
int addx;
int addy;
}t[4*maxn];
struct preson{
int x;
int y;
}p[maxn];
inline int read(){
int w=1,x=0,ch=getchar();
for(;ch<'0'||ch>'9';ch=getchar()) if(ch=='-') w=-1;
for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0';
return w*x;
}
void pushup(int rt){
t[rt].x=t[rt<<1].x+t[rt<<1|1].x;
t[rt].y=t[rt<<1].y+t[rt<<1|1].y;
}
void build(int rt,int l,int r){
if(l==r){
cnt++;
t[rt].y=cnt;
return ;
}
int mid=(l+r)>>1;
build(rt<<1,l,mid);
build(rt<<1|1,mid+1,r);
pushup(rt);
}
void pushdown(int rt,int lenn){
if(t[rt].addx){
t[rt<<1].addx+=t[rt].addx;
t[rt<<1|1].addx+=t[rt].addx;
t[rt<<1].x+=t[rt].addx*(lenn-(lenn>>1));
t[rt<<1|1].x+=t[rt].addx*(lenn>>1);
t[rt].addx=0;
}
if(t[rt].addy){
t[rt<<1].addy+=t[rt].addy;
t[rt<<1|1].addy+=t[rt].addy;
t[rt<<1].y+=t[rt].addy*(lenn-(lenn>>1));
t[rt<<1|1].y+=t[rt].addy*(lenn>>1);
t[rt].addy=0;
}
}
void change(int rt,int l,int r,int L,int R,int dx,int dy){
if(L<=l&&r<=R){
t[rt].addx+=dx;
t[rt].addy+=dy;
t[rt].x+=dx;
t[rt].y+=dy;
return ;
}
pushdown(rt,r-l+1);
int mid=(l+r)>>1;
if(L<=mid) change(rt<<1,l,mid,L,R,dx,dy);
if(R>mid) change(rt<<1|1,mid+1,r,L,R,dx,dy);
pushup(rt);
}
void query(int rt,int l,int r,int L,int R){
if(L<=l&&r<=R){
cout<<t[rt].x<<".0 "<<t[rt].y<<".0 "<<'\n';
return ;
}
int mid=(l+r)>>1;
pushdown(rt,r-l+1);
if(L<=mid) query(rt<<1,l,mid,L,R);
if(R>mid) query(rt<<1|1,mid+1,r,L,R);
}
int main(){
freopen("asm_command.in","r",stdin);
freopen("asm_command.out","w",stdout);
n=read(),q=read();
int opt,x,y,dx,dy;
if(n<=1000){
for(register int i=1;i<=n;i++) p[i].y=i;
while(q--){
opt=read();
if(opt==0){
x=read();
cout<<p[x].x<<".0 "<<p[x].y<<".0"<<'\n';
}
if(opt==1){
cin>>x>>y>>dx>>dy;
for(int i=x;i<=y;i++){
p[i].x+=dx;
p[i].y+=dy;
}
}
}
}
else{
build(1,1,n);
while(q--){
opt=read();
if(opt==1){
x=read(),y=read(),dx=read(),dy=read();
change(1,1,n,x,y,dx,dy);
}
if(opt==0){
x=read();
query(1,1,n,x,x);
}
}
}
return 0;
}