SPOJ - MATSUM Matrix Summation---二维树状数组
题目链接:
https://vjudge.net/problem/SPOJ-MATSUM
题目大意:
二维数组,两种操作
SET 将某点设置成x
SUM 求某个区域之和
解题思路:
这里用二维树状数组
SUM可以直接求出来

这里将某点设置成x,和树状数组不同,树状数组是讲某点加上一个值,但是可以另外建一个数组存储当前所有点的数值,如果要将(x, y)设置成d的话,可以先把该点减去a[x][y]再加上d
合并一下就是:add(x, y, d - a[x][y])
#include<iostream>
#include<string>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
const int maxn = ;
int tree[maxn][maxn];
int a[maxn][maxn];//记录当前每个位置的值
int n;
int lowbit(int x)
{
return x & (-x);
}
//修改tree[x][y] += d;
void add(int x, int y, int d)
{
for(int i = x; i <= n; i += lowbit(i))
{
for(int j = y; j <= n; j += lowbit(j))
{
tree[i][j] += d;
}
}
}
//从(1,1)到(x, y)数字之和
ll sum(int x, int y)
{
ll ans = ;
for(int i = x; i > ; i -= lowbit(i))//等于0会无限循环
{
for(int j = y; j > ; j -= lowbit(j))
{
ans += tree[i][j];
}
}
return ans;
} int main()
{
int T;
scanf("%d", &T);
while(T--)
{
scanf("%d", &n);
memset(tree, , sizeof(tree));
memset(a, ,sizeof(a));
char s[];
int x, y, z, x1, y1, x2, y2;
while(scanf("%s", s))
{
if(s[] == 'E')break;
if(s[] == 'E')//SET
{
scanf("%d%d%d", &x, &y, &z);
x++;
y++;//必须从(1,1)开始
add(x, y, z - a[x][y]);//利用之前该位置的数值,就可以把该点设置成z
a[x][y] = z;
}
else if(s[] == 'U')//SUM
{
scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
x1++, y1++, x2++, y2++;
ll ans = ;
ans += sum(x2, y2);
ans += sum(x1 - , y1 - );
ans -= sum(x1 - , y2);
ans -= sum(x2, y1 - );
printf("%lld\n", ans);
}
}
}
return ;
}
SPOJ - MATSUM Matrix Summation---二维树状数组的更多相关文章
- POJ 2155 Matrix (二维树状数组)
Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 17224 Accepted: 6460 Descripti ...
- POJ 2155 Matrix【二维树状数组+YY(区间计数)】
题目链接:http://poj.org/problem?id=2155 Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissio ...
- POJ2155 Matrix(二维树状数组||区间修改单点查询)
Given an N*N matrix A, whose elements are either 0 or 1. A[i, j] means the number in the i-th row an ...
- HLJU 1188 Matrix (二维树状数组)
Matrix Time Limit: 4 Sec Memory Limit: 128 MB Description 给定一个1000*1000的二维矩阵,初始矩阵中每一个数都为1,然后为矩阵有4种操 ...
- POJ 2155 Matrix(二维树状数组+区间更新单点求和)
题意:给你一个n*n的全0矩阵,每次有两个操作: C x1 y1 x2 y2:将(x1,y1)到(x2,y2)的矩阵全部值求反 Q x y:求出(x,y)位置的值 树状数组标准是求单点更新区间求和,但 ...
- [POJ2155]Matrix(二维树状数组)
题目:http://poj.org/problem?id=2155 中文题意: 给你一个初始全部为0的n*n矩阵,有如下操作 1.C x1 y1 x2 y2 把矩形(x1,y1,x2,y2)上的数全部 ...
- POJ 2155 Matrix 【二维树状数组】(二维单点查询经典题)
<题目链接> 题目大意: 给出一个初始值全为0的矩阵,对其进行两个操作. 1.给出一个子矩阵的左上角和右上角坐标,这两个坐标所代表的矩阵内0变成1,1变成0. 2.查询某个坐标的点的值. ...
- POJ 2155 Matrix (二维树状数组)题解
思路: 没想到二维树状数组和一维的比只差了一行,update单点更新,query求和 这里的函数用法和平时不一样,query直接算出来就是某点的值,怎么做到的呢? 我们在更新的时候不止更新一个点,而是 ...
- PKU 2155 Matrix(裸二维树状数组)
题目大意:原题链接 题意很简单,就不赘诉了. 解题思路: 使用二维树状数组,很裸的题. 二维的写起来也很方便,两重循环. Add(int x,int y,int val)表示(x,y)-(n,n)矩形 ...
- POJ_2155 Matrix 【二维树状数组】
一.题面 POJ2155 二.分析 楼教主出的题,是二维树状数组非常好的题,还结合了开关问题(开关变化的次数如果为偶数,状态不变,奇数状态相反). 题意就是给了一个二维的坐标平面,每个点初始值都是0, ...
随机推荐
- 网格概念 Gutter
Bootstrap4也是由以上基础概念作为发展 Bootstrap 栅栏式排版 , 总栏数为12 (以下代码探寻问题, 实际上使用方法是错误的) <style> .box { heigh ...
- 上传文件到linux乱码问题
由于linux系统编码一般设置为utf-8,而中文windows下通常默认编码是gbk,因此经常需要将文件名或文件内容编码进行转换,文件名编码转换软件:convmv yum install convm ...
- Java Web中相对路径与绝对路径的分析
一.相对路径与绝对路径 1.相对路径: 相对路径指的是相对于当前文件所在目录的路径! 相对路径易出问题: 当在页面间相互跳转时不会产生问题: 当从Servlet中转发到指定页面时,服务器会相对于当前S ...
- 微信小程序 —— 微信小程序解析html富文本插件wxParse
下载并把wxParse放到小程序的目录中 github下载地址:https://github.com/icindy/wxParse 一.基本使用方法 1. Copy文件夹wxParse,把wxPars ...
- noip2018复习计划啊
需要复习的算法额: exgcd CRT INV dij spfa(~) 矩阵快速幂~高斯消元 tarjan(scc,bcc) treap splay 线段树 dp(决策单调,斜率,四边形不等式) rh ...
- POJ2758 Checking the Text 哈希
注意到插入次数挺少的,于是每次暴力重构,然后哈希+二分 #include<cstdio> #include<iostream> #include<algorithm> ...
- Knight Tournament (set)
Hooray! Berl II, the king of Berland is making a knight tournament. The king has already sent the me ...
- LeetCode 128 Longest Consecutive Sequence 一个无序整数数组中找到最长连续序列
Given an unsorted array of integers, find the length of the longest consecutive elements sequence.Fo ...
- D - 稳住GCD DP
http://acm.uestc.edu.cn/#/problem/show/923 给定一堆数字,求其所有数字的gcd. 现在要删除最多的数字,使得剩下的数字的gcd和原来的一样. 设dp[i][v ...
- pat1035. Password (20)
1035. Password (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue To prepare f ...