记录编号 423768 评测结果 AAAAAAAAAA
题目名称 [IOI 2001] 移动电话 最终得分 100
用户昵称 GravatarkZime 是否通过 通过
代码语言 C++ 运行时间 0.152 s
提交时间 2017-07-12 15:44:03 内存使用 4.34 MiB
显示代码纯文本
# include <bits/stdc++.h>
# define MAXN 1027
using namespace std;

int bit[MAXN][MAXN], n, op;

inline int lb(int x) {return x & -x;}

inline void add2(int *s, int x, int p) { 
    for(; x <= n; x += lb(x)) s[x] += p;
}

inline void add1(int x, int y, int p) { 
    for(; x <= n; x += lb(x)) add2(bit[x], y, p);
}

inline int query2(int *s, int x) { 
    int tmp = 0;
    for(; x; x -= lb(x)) tmp += s[x];
    return tmp;
}

inline int query1(int x, int y) { 
    int tmp = 0;
    for(; x; x -= lb(x)) tmp += query2(bit[x], y);
    return tmp;
}

int main() { 
# ifndef LOCAL 
    freopen("mobilephones.in", "r", stdin);
    freopen("mobilephones.out", "w", stdout);
# endif
    scanf("%d %d", &op, &n);
    while(true) { 
        scanf("%d", &op);
        if(op == 3) return 0;
        else if(op == 1) { 
            int x, y, p;
            scanf("%d %d %d", &x, &y, &p);
            add1(++x, ++y, p);
        } else if(op == 2) { 
            int l, b, r, t;
            scanf("%d %d %d %d", &l, &b, &r, &t);
            l++, b++, r++, t++;
            printf("%d\n", query1(r, t) + query1(l - 1, b - 1) - query1(l - 1, t) - query1(r, b - 1));
        }
    }
}