• poj 1195 mobile phone


    题目连接:

    题意:要求设计这样一个数据结构,支持下列操作

    1.add(x,y,a).对二维数组的第x行,第y列加上a.

    2.sum(l,b,r,t).求所有满足l<=x<=r,b<=y<=t,的数组元素的和

    二位树状数组~

     1 #include <iostream>
     2 #include <string.h>
     3 #include <stdio.h>
     4 #include <stdlib.h>
     5 #define loop(s,i,n) for(i = s;i <= n;i++)
     6 #define lowbit(x) x&-x
     7 using namespace std;
     8 int c[1050][1050];
     9 int n;
    10 void add(int a,int b,int val)
    11 {
    12     int i,j;
    13     for(i = a;i <= n;i += lowbit(i))
    14     {
    15         for(j = b;j <= n;j += lowbit(j))
    16         c[i][j] += val;
    17     }
    18 }
    19 
    20 int sum(int a,int b)
    21 {
    22     int res = 0;
    23     int i,j;
    24     for(i = a;i > 0;i -= lowbit(i))
    25     {
    26         for(j = b;j > 0;j -= lowbit(j))
    27         res+=c[i][j];
    28     }
    29     return res;
    30 }
    31 int main()
    32 {
    33     int t,i,j,a,b,l,r;
    34     while(~scanf("%d",&t) != EOF)
    35     {
    36         if(!t)
    37         {
    38             scanf("%d",&n);
    39             loop(1,i,n)
    40             {
    41                 loop(1,j,n)
    42                 c[i][j] = 0;
    43             }
    44         }
    45         if(t == 1)
    46         {
    47             scanf("%d %d %d",&a,&b,&l);
    48             add(a+1,b+1,l);
    49         }
    50         else if(t == 2)
    51         {
    52             scanf("%d %d %d %d",&a,&b,&l,&r);
    53             printf("%d
    ",sum(a,b)+sum(l+1,r+1)-sum(a,r+1)-sum(l+1,b));
    54         }
    55         if(t == 3)
    56         break;
    57     }
    58     return 0;
    59 }
    View Code
  • 相关阅读:
    动态svg图片简单制作
    5418.二叉树中的伪回文路径
    5417.定长子串中元音的最大数目
    76.最小覆盖子串
    1371.每个元音包含偶数次的最长子字符串
    680.验证回文字符串II
    152.乘积最大子数组
    5397.最简分数
    5398.统计二叉树中好节点的数目
    5413.重新排列句子中的单词
  • 原文地址:https://www.cnblogs.com/0803yijia/p/3214081.html
Copyright © 2020-2023  润新知