读书人

Poj 1159 Mobile phones 例题

发布时间: 2012-09-04 14:19:30 作者: rapoo

Poj 1159 Mobile phones 题解

本题是二维树状数组的典型应用:

代码:

#include <stdio.h>#include <stdlib.h>#include <string.h>using namespace std;int c[1030][1030];int order;int s;int lowbit(int t){    return t&(-t);}void update(int x,int y,int a){    while(x<=s)    {        int  tempy = y;        while(tempy<=s)        {            c[x][tempy]+=a;            tempy+=lowbit(tempy);        }        x+=lowbit(x);    }}int getSum(int x,int y){    int sum = 0;    while(x>0)    {        int tempy = y;        while(tempy>0)        {            sum+=c[x][tempy];            tempy-=lowbit(tempy);        }        x-=lowbit(x);    }    return sum;}int main(){    scanf("%d",&order);    while(order<3)    {        if(order == 0)        {            scanf("%d",&s);             memset(c,0,sizeof(c));        }        else if(order == 1)        {            int x,y,a;            scanf("%d%d%d",&x,&y,&a);            update(x+1,y+1,a);        }        else if(order == 2)        {            int x1,x2,y1,y2;            scanf("%d%d%d%d",&x1,&y1,&x2,&y2);            printf("%d\n",getSum(x2+1,y2+1)-getSum(x1,y2+1)-getSum(x2+1,y1)+getSum(x1,y1));        }        scanf("%d",&order);    }    return 0;}


读书人网 >编程

热点推荐