首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Poj 1159 Mobile phones 例题

2012-09-04 
Poj 1159 Mobile phones 题解本题是二维树状数组的典型应用:代码:#include stdio.h#include stdlib.h#

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;}


热点排行