Mobile phones

Time Limit: 5000MS

 

Memory Limit: 65536K

Total Submissions: 13774

 

Accepted: 6393

Description

Suppose that the fourth generation mobile phone base stations in the Tampere area operate as follows. The area is divided into squares. The squares form an S * S matrix with the rows and columns numbered from 0 to S-1. Each square contains a base station. The number of active mobile phones inside a square can change because a phone is moved from a square to another or a phone is switched on or off. At times, each base station reports the change in the number of active phones to the main base station along with the row and the column of the matrix.

Write a program, which receives these reports and answers queries about the
current total number of active mobile phones in any rectangle-shaped area.

Input

The input is read from standard input as integers and the
answers to the queries are written to standard output as integers. The input is
encoded as follows. Each input comes on a separate line, and consists of one
instruction integer and a number of parameter integers according to the
following table.

The values will always be in range, so there is no need to check them. In
particular, if A is negative, it can be assumed that it will not reduce the
square value below zero. The indexing starts at 0, e.g. for a table of size 4 *
4, we have 0 <= X <= 3 and 0 <= Y <= 3.

Table size: 1 * 1 <= S * S <= 1024 * 1024
Cell value V at any time: 0 <= V <= 32767
Update amount: -32768 <= A <= 32767
No of instructions in input: 3 <= U <= 60002
Maximum number of phones in the whole table: M= 2^30

Output

Your program should not answer anything to lines with an
instruction other than 2. If the instruction is 2, then your program is
expected to answer the query by writing the answer as a single line containing
a single integer to standard output.

Sample Input

0 4

1 1 2 3

2 0 0 2 2

1 1 1 2

1 1 2 -1

2 1 1 2 3

3

Sample Output

3

4

题目的大意是在一个二维的数组里,更新某些值,询问(l,b,r,t)之内的值的和。有4种操作:0:输入一个S,建立一个S*S的矩阵;1:将A值加到相应的(x,y)里;2:求值。

注意范围。对于二维的add(x, y),c[x][y]记录的是以原点和(x, y)做的矩形中的值的和,比如说c[x][y] = ∑( c[ai][bi] ),c[ai][bi]是其中的子矩形的值的和。

 /*
POJ 1195 Mobile phones
二维树状数组
*/
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
#define N 1030
int c[N][N];
int n;
int lowbit(int x)
{
return x & (-x);
}
void add(int x, int y, int val)
{
for(int i=x; i<=n; i+=lowbit(i))
for(int j=y; j<=n; j+=lowbit(j))
c[i][j]+=val;
}
int getsum(int x, int y)
{
int s=;
for(int i=x; i>; i-=lowbit(i))
for(int j=y; j>; j-=lowbit(j))
s+=c[i][j];
return s;
}
int main()
{
//freopen("1195.txt","r",stdin);
int X,Y,A,L,B,R,T;
int a;
while(scanf("%d",&a)!=EOF)
{
if(a==)
{
scanf("%d",&n);
memset(c,,sizeof(c));
}
if(a==)
{
scanf("%d %d %d",&X,&Y,&A);
add(X+,Y+,A);
}
if(a==)
{
scanf("%d %d %d %d",&L,&B,&R,&T);
printf("%d\n",getsum(R+,T+)+getsum(L,B)-getsum(L,T+)-getsum(R+,B));
}
if(a==) break;
} return ;
}

POJ 1195的更多相关文章

  1. poj 1195:Mobile phones(二维树状数组,矩阵求和)

    Mobile phones Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 14489   Accepted: 6735 De ...

  2. poj 1195:Mobile phones(二维线段树,矩阵求和)

    Mobile phones Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 14391   Accepted: 6685 De ...

  3. poj 1195 Mobile phones(二维树状数组)

    树状数组支持两种操作: Add(x, d)操作:   让a[x]增加d. Query(L,R): 计算 a[L]+a[L+1]……a[R]. 当要频繁的对数组元素进行修改,同时又要频繁的查询数组内任一 ...

  4. ●POJ 1195 Mobile phones

    题链: http://poj.org/problem?id=1195 题解: 二维树状数组 #include<cstdio> #include<cstring> #includ ...

  5. poj 1195 Mobile phones 解题报告

    题目链接:http://poj.org/problem?id=1195 题目意思:有一部 mobie phone 基站,它的面积被分成一个个小正方形(1 * 1 的大小),所有的小正方形的面积构成了一 ...

  6. (简单) POJ 1195 Mobile phones,二维树状数组。

    Description Suppose that the fourth generation mobile phone base stations in the Tampere area operat ...

  7. poj 1195 - Mobile phones(树状数组)

    二维的树状数组,,, 记得矩阵的求和运算要想好在写.... 代码如下: #include <cstdio> #include <cstdlib> #include <cm ...

  8. POJ 1195 二维树状数组

    Mobile phones Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 18489   Accepted: 8558 De ...

  9. POJ 1195 Mobile Phones

    树状数组,开始的时候wa了,后来看看,原来是概率论没学好,以为求(L,B) - (R,T) 矩阵内的和只要用sum(R+1,T+1) - sum(L,B) 就行了,.傻x了.. 必须 sum(R,T) ...

随机推荐

  1. Eclipse内置Tomcat的配置

    1.首先肯定是得下载J2EE版本的eclipse了,再去Apache Tomcat的官网去下一个Tomcat.都解压到自己想放的目录 2.Eclipse -> Preferences -> ...

  2. JAVA 数组算法(复制、查找、插入)

    一.复制数组算法 //数组复制算法 public class Test{ public static void main(String[] args){ int[] arrA = {100,800,5 ...

  3. StringIO 模块用于在内存缓冲区中读写数据

    模块是用类编写的,只有一个StringIO类,所以它的可用方法都在类中.此类中的大部分函数都与对文件的操作方法类似. 例: #coding=gbk import StringIO s=StringIO ...

  4. Java多线程之新类库中的构件PriorityBlockingQueue

    package concurrent2; import java.util.ArrayList; import java.util.List; import java.util.Queue; impo ...

  5. .Net调用非托管代码数据类型不一致的问题

    什么是Net互操作?.Net不能直接操作非托管代码,这时就需要互操作了.   c#中调用非托管c++函数,此函数又包含指向某个结构的指针,譬如指向c#中的byte数组.对于这样的参数,考虑到非托管变量 ...

  6. Access“存储过程"参数顺序要与执行代码生成的参数顺序一致

    OleDbParameter olp; OleDbCommand cmd = new OleDbCommand("insertYjsData"); olp = new OleDbP ...

  7. CentOS 7 安装无线驱动

    一.确认网卡的版本 lspci | grep Network [root@bogon ~]# lspci | grep Network :) :) [root@bogon ~]# 二.下载网卡的驱动, ...

  8. 20145305 《Java程序设计》第3周学习总结

    教材学习内容总结 1."一类一文件" 2.参考名称与对象数据成员同名时,可以在数据成员前使用this区别 3.不能用==直接比较浮点数运算结果 4.=是用在指定参考名称参考某个对象 ...

  9. [Flex] PopUpButton系列 —— 添加按钮图标

    <?xml version="1.0" encoding="utf-8"?><!--为主按钮添加默认图标 PopUpButtonIcon.mx ...

  10. [ActionScript 3.0] AS3中Loader无法彻底卸载

    我测试发现,实例化的Loader无法彻底卸载,同行有没有办法,求赐教! import flash.display.Loader; import flash.net.URLRequest; import ...