博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SPOJ - MATSUM Matrix Summation---二维树状数组
阅读量:5892 次
发布时间:2019-06-19

本文共 2089 字,大约阅读时间需要 6 分钟。

题目链接:

题目大意:

二维数组,两种操作

SET 将某点设置成x

SUM 求某个区域之和

解题思路:

这里用

SUM可以直接求出来

这里将某点设置成x,和树状数组不同,树状数组是讲某点加上一个值,但是可以另外建一个数组存储当前所有点的数值,如果要将(x, y)设置成d的话,可以先把该点减去a[x][y]再加上d

合并一下就是:add(x, y, d - a[x][y])

1 #include
2 #include
3 #include
4 #include
5 using namespace std; 6 typedef long long ll; 7 const int maxn = 1025; 8 int tree[maxn][maxn]; 9 int a[maxn][maxn];//记录当前每个位置的值10 int n;11 int lowbit(int x)12 {13 return x & (-x);14 }15 //修改tree[x][y] += d;16 void add(int x, int y, int d)17 {18 for(int i = x; i <= n; i += lowbit(i))19 {20 for(int j = y; j <= n; j += lowbit(j))21 {22 tree[i][j] += d;23 }24 }25 }26 //从(1,1)到(x, y)数字之和27 ll sum(int x, int y)28 {29 ll ans = 0;30 for(int i = x; i > 0; i -= lowbit(i))//等于0会无限循环31 {32 for(int j = y; j > 0; j -= lowbit(j))33 {34 ans += tree[i][j];35 }36 }37 return ans;38 }39 40 int main()41 {42 int T;43 scanf("%d", &T);44 while(T--)45 {46 scanf("%d", &n);47 memset(tree, 0, sizeof(tree));48 memset(a, 0,sizeof(a));49 char s[5];50 int x, y, z, x1, y1, x2, y2;51 while(scanf("%s", s))52 {53 if(s[0] == 'E')break;54 if(s[1] == 'E')//SET55 {56 scanf("%d%d%d", &x, &y, &z);57 x++;58 y++;//必须从(1,1)开始59 add(x, y, z - a[x][y]);//利用之前该位置的数值,就可以把该点设置成z60 a[x][y] = z;61 }62 else if(s[1] == 'U')//SUM63 {64 scanf("%d%d%d%d", &x1, &y1, &x2, &y2);65 x1++, y1++, x2++, y2++;66 ll ans = 0;67 ans += sum(x2, y2);68 ans += sum(x1 - 1, y1 - 1);69 ans -= sum(x1 - 1, y2);70 ans -= sum(x2, y1 - 1);71 printf("%lld\n", ans);72 }73 }74 }75 return 0;76 }

 

转载于:https://www.cnblogs.com/fzl194/p/8923153.html

你可能感兴趣的文章
笨办法学C 练习1:启用编译器
查看>>
用Golang写一个搜索引擎(0x01)--- 基本概念
查看>>
【算法之美】logn 时间复杂度求解两个有序数组的中位数
查看>>
树的总结--树的性质(树的深度) leetcode
查看>>
docker环境搭建ELK
查看>>
webpack sourcemap 选项多种模式的一些解释
查看>>
document.createElement()的用法
查看>>
MySQL 数据库怎样把一个表的数据插入到另一个表
查看>>
HTTP协议及其POST与GET操作差异 & C#中如何使用POST、GET等
查看>>
nginx正则笔记
查看>>
delphi实现数字的倒计时
查看>>
在 IIS 下添加 FLV 类型文件的支持
查看>>
java线程学习3——线程的停止
查看>>
穿过任意防火墙NAT的远程控制软件TeamViewer
查看>>
PIX防火墙基本特性:失效处理机制和冗余-原理与实验
查看>>
域环境内部署Bginfo来统计用户计算机信息
查看>>
nagios短信报警(飞信fetion20080522004-linrh4)
查看>>
【Android游戏开发之六】在SurfaceView中添加组件!!!!并且相互交互数据!!!!...
查看>>
创建实体类使用Hibernate
查看>>
异常处理汇总-开发工具
查看>>