比赛 Asm.Def战记之圣地亚哥“杯2015 评测结果 AAAAAAAWWW
题目名称 Asm.Def的命令 最终得分 70
用户昵称 asddddd 运行时间 1.059 s
代码语言 C++ 内存使用 7.87 MiB
提交时间 2015-10-31 11:07:30
显示代码纯文本
//
//  main.cpp
//  asm_command
//
//  Created by apple on 15/10/31.
//  Copyright (c) 2015年 刘泽群. All rights reserved.
//

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#define maxn 110000
using namespace std;
typedef pair<double, double> pi;
double addx[4*maxn],addy[4*maxn],id[maxn];
void build(int l,int r,int c){
    if (l==r) {
        id[l]=c;
        return;
    }
    int mid=(l+r)/2;
    build(l, mid, c<<1);
    build(mid+1, r, c<<1|1);
    return ;
}
void adddx(int l,int r,int la,int ra,int c,int x){
    if (la<=l&&ra>=r) {
        addx[c]+=x;
        return;
    }
    int mid=(l+r)/2;
      if (ra<=mid) {
          adddx(l, mid, la, ra, c<<1, x);
    }
    else if (la>mid) {
        adddx(mid+1, r, la, ra, c<<1|1, x);
    }
    else{
    adddx(l, mid, la, ra, c<<1, x);
    adddx(mid+1, r, la, ra, c<<1|1, x);
    }
}
void adddy(int l,int r,int la,int ra,int c,int x){
    if (la<=l&&ra>=r) {
        addy[c]+=x;
        return;
    }
    int mid=(l+r)/2;
    if (ra<=mid) {
        adddy(l, mid, la, ra, c<<1, x);
        return;
    }
    else if (la>mid) {
        adddy(mid+1, r, la, ra, c<<1|1, x);
        return;
    }
    else{
    adddy(l, mid, la, ra, c<<1, x);
    adddy(mid+1, r, la, ra, c<<1|1, x);
    }
}
pi seaarch(int x){
    int k=id[x];
    pi ans(0+addx[k],x+addy[k]);
    k>>=1;
    while (k!=0) {
        ans.first+=addx[k];
        ans.second+=addy[k];
        k>>=1;
    }
    return ans;
}
int main() {
	freopen("asm_command.in","r",stdin);
	freopen("asm_command.out","w",stdout);
    int n,q;
    cin>>n>>q;
    build(1, n, 1);
    for (int i=1; i<=q; i++) {
        int type;
        cin>>type;
        if (type==1) {
            int l,r;
            cin>>l>>r;
            int ax,ay;
            cin>>ax>>ay;
            adddx(1, n, l, r, 1, ax);
            adddy(1, n, l, r, 1, ay);
        }
        else if(type==0){
            int a;
            cin>>a;
            pi asd=seaarch(a);
            printf("%.1lf %.1lf",asd.first,asd.second);
            cout<<endl;
        }
        else {
        	cout<<"whatever,i don't know how to rotate"<<endl;
        }
    }
    return 0;
}