zoukankan      html  css  js  c++  java
  • poj 1195 Mobile phones

    题意:

    初始化一个矩阵,有几种操作:

    1.X Y A,想坐标为(X,Y)的格子里面加A;

    2.L B R T,查询L <= x <= R,B <= y <= T的范围内的数的和是多少。

    思路:

    二维树状数组,加一重循环查询前缀和。

    代码:

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <algorithm>
     4 using namespace std;
     5 const int N = 1035;
     6 int c[N][N];
     7 int S;
     8 int lowbit(int x)
     9 {
    10     return x&(-x);
    11 }
    12 void add(int x,int y,int cc)
    13 {
    14     for (int i = x;i <= S;i += lowbit(i)) c[i][y] += cc;
    15 }
    16 int getsum(int x,int y1,int y2)
    17 {
    18     int ans = 0;
    19     for (int i = y1;i <= y2;i++)
    20     {
    21         for (int j = x;j > 0;j -= lowbit(j)) ans += c[j][i]; 
    22     }
    23     return ans;
    24 }
    25 int main()
    26 {
    27     int x;
    28     for (;;)
    29     {
    30         scanf("%d",&x);
    31         if (x == 3) break;
    32         if (x == 0)
    33         {
    34             scanf("%d",&S);
    35             memset(c,0,sizeof(c));
    36         }
    37         if (x == 1)
    38         {
    39             int a,b,num;
    40             scanf("%d%d%d",&a,&b,&num);
    41             a++,b++;
    42             add(a,b,num);
    43         }
    44         if (x == 2)
    45         {
    46             int l,b,r,t;
    47             scanf("%d%d%d%d",&l,&b,&r,&t);
    48             l++,b++,r++,t++;
    49             int cnt1 = getsum(l-1,b,t);
    50             int cnt2 = getsum(r,b,t);
    51             printf("%d
    ",cnt2 - cnt1);
    52         }
    53     }
    54     return 0;
    55 }
  • 相关阅读:
    log4j(二)——如何控制日志信息的输出?
    Java生成指定范围内的工具类
    JavaBean和Map转换封装类
    cron表达式详解
    数据库主键按照固定前缀生成工具类
    邮件发送工具类
    NFC
    牛逼辩论
    快速排序
    希尔排序
  • 原文地址:https://www.cnblogs.com/kickit/p/9069590.html
Copyright © 2011-2022 走看看