zoukankan      html  css  js  c++  java
  • poj 1195 Mobile phones(二维树状数组)

    题目链接:http://poj.org/problem?id=1195

    题意:给你一个矩阵(初始化为0)和一些操作,1 x y a表示在arr[x][y]加上a,2 l b r t 表示求左上角为(l,b),右下角为(r,t)的矩阵的和。

    分析:裸的二维树状数组。

    代码如下:

     1 #include<stdio.h>
     2 #include<string.h>
     3 #define N 1100
     4 int c[N][N],n,arr[N][N];
     5 int lowbit(int x)
     6 {
     7     return x&(-x);
     8 }
     9 void update(int x,int y,int num)
    10 {
    11     int i,j;
    12     for(i=x;i<=n;i+=lowbit(i))
    13         for(j=y;j<=n;j+=lowbit(j))
    14             c[i][j]+=num;
    15 }
    16 int sum(int x,int y)
    17 {
    18     int i,j,s=0;
    19     for(i=x;i>0;i-=lowbit(i))
    20         for(j=y;j>0;j-=lowbit(j))
    21             s+=c[i][j];
    22     return s;
    23 }
    24 int getsum(int x1,int y1,int x2,int y2)
    25 {
    26     return sum(x2,y2)-sum(x1-1,y2)-sum(x2,y1-1)+sum(x1-1,y1-1);
    27 }
    28 int main()
    29 {
    30     int op,x,y,l,b,r,t,a;
    31     while(scanf("%d",&op)!=EOF)
    32     {
    33         if(op==0)
    34         {
    35             scanf("%d",&n);
    36             memset(c,0,sizeof(c));
    37         }
    38         else if(op==1)
    39         {
    40             scanf("%d%d%d",&x,&y,&a);
    41             update(x+1,y+1,a);
    42         }
    43         else if(op==2)
    44         {
    45             scanf("%d%d%d%d",&l,&b,&r,&t);
    46             int ans=getsum(l+1,b+1,r+1,t+1);
    47             printf("%d
    ",ans);
    48         }
    49     }
    50     return 0;
    51 }
    View Code
  • 相关阅读:
    idea编辑器快捷键
    双随机系统遇到的简单样式问题
    HTTP笔记八
    HTTP笔记七
    HTTP笔记六
    HTTP笔记五
    HTTP笔记四
    HTTP笔记三
    HTTP笔记二
    HTTP笔记一
  • 原文地址:https://www.cnblogs.com/frog112111/p/3265047.html
Copyright © 2011-2022 走看看