题目大意

给定一个N*N的网格,刚开始每个网格的值都是0,接下来会对这些网格进行操作,有一下两种操作:

1、”X Y A“对网格C[x][y]增加A

2、”L B R T“ 查询所有(L<=X<=R,B<=Y<=T)的网格],并返回它们的总和

如果是针对于单点修改,那是比区间修改好打很多,因为这个只需要将区间拆分成许多个树状数组就可以了,

然后修改的时候将树状数组修改,十分好理解的。

查询的话就是二维前缀和的查询,然后就可以了。

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<iostream>
 4 #include<cstring>
 5 #include<cmath>
 6 #define N 1057
 7 using namespace std;
 8
 9 int n,k;
10 int a[N][N];
11
12 int lowbit(int x)
13 {
14     return x&(-x);
15 }
16 void add(int x,int y,int z)
17 {
18     for (int i=x;i<=n;i+=lowbit(i))
19         for (int j=y;j<=n;j+=lowbit(j))
20             a[i][j]+=z;
21 }
22 int query(int x,int y)
23 {
24     int res=0;
25     for (int i=x;i>=1;i-=lowbit(i))
26         for (int j=y;j>=1;j-=lowbit(j))
27             res+=a[i][j];
28     return res;
29 }
30 int main()
31 {
32     while(scanf("%d",&k))
33     {
34         if (k==0)
35         {
36             scanf("%d",&n);
37             for (int i=1;i<=n;i++)
38                 for (int j=1;j<=n;j++)
39                     a[i][j]=0;
40         }
41         if (k==1)
42         {
43             int x,y,z;
44             scanf("%d%d%d",&x,&y,&z);
45             x++,y++;
46             add(x,y,z);
47         }
48         if (k==2)
49         {
50             int x1,x2,y1,y2;
51             scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
52             x1++,x2++,y1++,y2++;
53             cout<<query(x2,y2)+query(x1-1,y1-1)-query(x1-1,y2)-query(x2,y1-1)<<endl;
54         }
55         if (k==3) break;
56     }
57 }

转载于:https://www.cnblogs.com/fengzhiyuan/p/7573275.html

POJ(1195)(单点修改,区间查询)(二维)相关推荐

  1. POJ 1195 Mobile phones【 二维树状数组 】

    题意:基础的二维数组,注意 0 + lowbit(0)会陷入无限循环----- 之前做一道一维的一直tle,就是因为这个-------------------------- 1 #include< ...

  2. P3374 【模板】树状数组 1( 单点修改 + 区间查询 )

    题目链接:点击进入 题目 思路深入学习 树状数组实现-> 单点修改 + 区间查询 c [ i ] = a ( i - 2 ^ k + 1 ) + - + a [ i ] ( 设节点编号为 i , ...

  3. 自定义/修改微信二维码样式

    在写项目的时候遇到的一个需求,登录和注册都可以通过扫描微信的二维码来实现,但是在做的时候发现微信有一些它自带的样式,并且无法通过CSS直接修改. 通过查微信的开发者文档发现是支持修改的 wxHandl ...

  4. 线段树的建树 单点修改 区间查询

    (未经允许,严禁抄袭转载)(若有错误,请多多指教) 看了这张图后,大家可能明白建树的意思了 看代码以及注释 #include<bits/stdc++.h> using namespace ...

  5. 线段树模板1(例题BZOJ1012)单点修改+区间查询

    ---恢复内容开始--- 之所以这么迟才发是因为,这道题调了好久好久,结果发现是输入错误了..... 题目链接:http://www.lydsy.com/JudgeOnline/problem.php ...

  6. 树状数组模板1——单点修改区间查询

    树状数组的模板,修改单点的值,查询某个区间 1 #include<cstdio> 2 #include<cctype> 3 using namespace std; 4 5 i ...

  7. Android 修改zxing二维码样式

    主要修改onDraw方法里面的属性-- /*** This view is overlaid on top of the camera preview. It adds the viewfinder ...

  8. 【POJ - 2019】Cornfields(二维st表,模板)

    题干: FJ has decided to grow his own corn hybrid in order to help the cows make the best possible milk ...

  9. HDU1754 I Hate It (线段树单点修改+区间查询)

    题目链接:传送门 解题思路:从题目中我们很明显知道只有两种操作,第一种是查询\([A,B]\)范围内学生成绩的最大值,典型的RMQ,第二种操作是将A的成绩改为B,而不是改为B的成绩,请仔细体会.(当然 ...

  10. 数据结构一【树状数组】普通、二维、离线树状数组的(单点修改,单点查询,区间修改,区间查询)模板及应用例题总结

    文章目录 树状数组 lowbit 线段树与树状数组 单点修改 区间查询 区间修改 区间求和 二维树状数组 离线树状数组 例题 POJ:stars MooFest [SDOI2009]HH的项链 Tur ...

最新文章

  1. NYOJ 题目528 找球号(三)
  2. ieda 远程调试hive_idea 远程调试
  3. 一文读懂RPA与BPM的区别和联系
  4. lenos快速开发脚手架
  5. 如何讲页面打入jar包中_如何把我的Java程序变成exe文件?
  6. 利用bds和dfs解决 LeetCode 107. Binary Tree Level Order Traversal II
  7. 汇编语言和C语言的比较
  8. JDK API 1.6.0中文版零C币纯分享,直接下载即可。
  9. 鲸会务,多场景覆盖数字化会议管家
  10. JAVA实现GIF添加水印
  11. 手机技巧之扩展内存的检测以及修复。
  12. Unity统计代码行数脚本
  13. Xiuno修罗轻论坛仿知乎蓝简约响应式主题模板1.7+自适应PC+WAP端
  14. vs2017\vs2019 VGG19处理cifar-10数据集的TensorFlow实现
  15. 关闭Nao机器人自带的摔倒保护
  16. 饥荒联机版连不上服务器_饥荒本地联机|饥荒联机版无法连接到klei服务器怎么回事_234游戏网...
  17. Java 实例-打印图形
  18. 基于Bert的图书分类项目
  19. simId(SIM卡应用)
  20. Mvp+Okhttp+Event 传值

热门文章

  1. django和flask用MD5加密密码
  2. java面试题十 java数组初始化
  3. java 连接redis_Redis 开发陷阱及避坑指南!
  4. TensorFlow学习笔记(六)Variable变量
  5. dojo中的dojoConfig配置
  6. 聊聊CTR预估算法DeepFM
  7. Elasticsearch技术解析与实战(六)Elasticsearch并发
  8. 产品经理常用工具有哪些?哪些产品经理工具最有用?
  9. spring4.0之二:@Configuration的使用
  10. webapp 中为span元素赋值