Mobile phones
Time Limit: 5000MS   Memory Limit: 65536K
Total Submissions: 14291   Accepted: 6644

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

附二维树状数组解法:http://blog.csdn.net/chang_mu/article/details/37739053

题意:点更新。区域查询。

题解:主要的二维线段树。(今天看了非常久才看懂...线段树扩展到二维果然没有树状数组方便,可是一旦想通,会发现思路事实上并不复杂)。

#include <stdio.h>
#define maxn 1026
#define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1 int tree[maxn * 3][maxn * 3], size; void getSize(){ scanf("%d", &size); } void updateY(int rootX, int pos, int val, int l, int r, int rt)
{
tree[rootX][rt] += val;
if(l == r) return; int mid = (l + r) >> 1;
if(pos <= mid) updateY(rootX, pos, val, lson);
else updateY(rootX, pos, val, rson);
} void updateX(int x, int y, int val, int l, int r, int rt)
{
//更新的任务都交给updateY
updateY(rt, y, val, 0, size - 1, 1);
if(l == r) return; int mid = (l + r) >> 1;
if(x <= mid) updateX(x, y, val, lson);
else updateX(x, y, val, rson);
} void update()
{
int x, y, val;
scanf("%d%d%d", &x, &y, &val);
updateX(x, y, val, 0, size - 1, 1);
} int queryY(int rootX, int y1, int y2, int l, int r, int rt)
{
if(l == y1 && r == y2) return tree[rootX][rt]; int mid = (l + r) >> 1;
if(y2 <= mid) return queryY(rootX, y1, y2, lson);
else if(y1 > mid) return queryY(rootX, y1, y2, rson);
else{
return queryY(rootX, y1, mid, lson) + queryY(rootX, mid + 1, y2, rson);
}
} int queryX(int x1, int x2, int y1, int y2, int l, int r, int rt)
{
if(x1 == l && x2 == r) return queryY(rt, y1, y2, 0, size - 1, 1); int mid = (l + r) >> 1;
if(x2 <= mid) return queryX(x1, x2, y1, y2, lson);
else if(x1 > mid) queryX(x1, x2, y1, y2, rson);
else{
return queryX(x1, mid, y1, y2, lson) + queryX(mid + 1, x2, y1, y2, rson);
}
} void query()
{
int x1, y1, x2, y2;
scanf("%d%d%d%d", &x1, &y1, &x2, &y2); printf("%d\n", queryX(x1, x2, y1, y2, 0, size - 1, 1));
} void (*funArr[])() = {
getSize, update, query
}; int main()
{
int num;
while(scanf("%d", &num), num != 3)
(*funArr[num])();
return 0;
}

POJ1195 Mobile phones 【二维线段树】的更多相关文章

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

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

  2. POJ1195 二维线段树

    Mobile phones POJ - 1195 Suppose that the fourth generation mobile phone base stations in the Tamper ...

  3. UVA 11297 线段树套线段树(二维线段树)

    题目大意: 就是在二维的空间内进行单个的修改,或者进行整块矩形区域的最大最小值查询 二维线段树树,要注意的是第一维上不是叶子形成的第二维线段树和叶子形成的第二维线段树要  不同的处理方式,非叶子形成的 ...

  4. POJ2155 Matrix二维线段树经典题

    题目链接 二维树状数组 #include<iostream> #include<math.h> #include<algorithm> #include<st ...

  5. HDU 1823 Luck and Love(二维线段树)

    之前只知道这个东西的大概概念,没具体去写,最近呵呵,今补上. 二维线段树 -- 点更段查 #include <cstdio> #include <cstring> #inclu ...

  6. poj 2155:Matrix(二维线段树,矩阵取反,好题)

    Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 17880   Accepted: 6709 Descripti ...

  7. POJ 2155 Matrix (二维线段树)

    Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 17226   Accepted: 6461 Descripti ...

  8. HDU 4819 Mosaic (二维线段树)

    Mosaic Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 102400/102400 K (Java/Others)Total S ...

  9. HDU 4819 Mosaic --二维线段树(树套树)

    题意: 给一个矩阵,每次查询一个子矩阵内的最大最小值,然后更新子矩阵中心点为(Max+Min)/2. 解法: 由于是矩阵,且要求区间最大最小和更新单点,很容易想到二维的线段树,可是因为之前没写过二维的 ...

随机推荐

  1. ASP.NET增加微信公众号功能

    最近微信的公众号使用的挺多的.我们也弄了个,现在有个需求就是在用户点击菜单的时候,获取用户的OPENID,然后作为后续使用. 首先记录下步骤, 安装必要的dll引用 install-package s ...

  2. JavaScript基础之原型对象和原型链

    原型对象 原型对象简单来说就是函数的原型所指向的对象.前面说原型的时候,说了Object.prototype所指对象就是Object(函数)的原型对象.在每个函数的原型对象中,默认会有construc ...

  3. linux安装mongodb(设置非root用户和开机启动)

    官网地址:https://www.mongodb.com/ 在官网上选择不同的linux系统得到不同的下载地址,我们用的下载地址是:https://fastdl.mongodb.org/linux/m ...

  4. BZOJ 2243 [SDOI2011]染色 (树链剖分)(线段树区间修改)

    [SDOI2011]染色 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 6870  Solved: 2546[Submit][Status][Disc ...

  5. POJ3345 Bribing FIPA(树形DP)

    题意:有n个国家,贿赂它们都需要一定的代价,一个国家被贿赂了从属这个国家的国家也相当于被贿赂了,问贿赂至少k个国家的最少代价. 这些国家的从属关系形成一个森林,加个超级根连接,就是一棵树了,考虑用DP ...

  6. 队列 LinkedBlockingQueue

    1 api     java.util.concurrent包下的新类.LinkedBlockingQueue就是其中之一,是一个阻塞的线程安全的队列,底层采用链表实现.             Li ...

  7. Bluetooth篇 开发实例之八 匹配

    自己写的App匹配蓝牙设备,不需要通过系统设置去连接. 匹配和通信是两回事. 用过Android系统设置(Setting)的人都知道蓝牙搜索之后可以建立配对和解除配对,但是这两项功能的函数没有在SDK ...

  8. debug with Linux slub allocator

     http://thinkiii.blogspot.jp/2014/02/debug-with-slub-allocator.html The slub allocator in Linux has ...

  9. VUE的进阶 标签属性数据绑定和拼接

    在vue官网把文档扫了一遍后,就开始写网站项目了,没有设计,就百度里找了一个h5的助赢软件的网站把他copy下来,想想有点坏了,接着把内容改改吧.首先开始做一个列表展示vue实例好后,给对象添加默认数 ...

  10. django 配置上传图片和文件

    在django中经常遇到要上传文件的需求,这里记录下如何配置用户上传的文件保存 首先在setting中添加 TEMPLATES = [ { 'BACKEND': 'django.template.ba ...