poj 1195(树状数组)

来源:互联网 发布:php 判断身份证号码 编辑:程序博客网 时间:2024/06/02 04:26

题目链接:点击打开链接


题目分析:二维树状数组的模板题,直接做就可以了;  (这里注意一个问题,题目的下标是从0开始记得,树状数组的下标要从1开始)


#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int n;int C[1030][1030];void init_C(){    for(int i = 1; i <= n; ++i)        for(int j = 1; j <= n; ++j) C[i][j] = 0;}inline int lowbit(int x){    return x&-x;}void add(int x, int y, int d){    for(int i = x; i <= n; i+=lowbit(i))        for(int j = y; j <= n; j+=lowbit(j))            C[i][j] += d;}int sum(int x, int y){    int res = 0;    for(int i = x; i > 0; i-=lowbit(i))        for(int j = y; j > 0; j-=lowbit(j))            res+=C[i][j];    return res;}int main(){    int op, x, y, d ,l, b, r, t;    while(~scanf("%d", &op) && op != 3){        if(op == 0) { scanf("%d", &n); init_C(); }        else if(op == 1){            scanf("%d%d%d", &x, &y, &d);            add(x+1, y+1, d);        } else if(op == 2){            scanf("%d%d%d%d", &l, &b, &r, &t);            l++, b++, r++, t++;            int ans = sum(r, t)+sum(l-1, b-1)-sum(r, b-1)-sum(l-1, t);            printf("%d\n", ans);        }    }    return 0;}


0 0
原创粉丝点击