二维树状数组poj1195
题目链接:https://vjudge.net/problem/POJ-1195
题意:一开始输入0和一个s,0代表开始,s代表这是一个s*s的图,接下来会输入1或2,1代表进行单点修改,后面会接3个数字x,y,value,表示把坐标(x,y)增加value,如果是2则代表区间查询,后面会跟两个点的坐标x1,y1,x2,y2,查询这两个点中间区间的区间和。我做的第一道二维数组的题目,感觉有点坑。
不知道二维数组,但是知道一维的可以这篇博客:https://blog.csdn.net/z309241990/article/details/9615259
一维也不清楚的大胸弟可以看这篇:https://blog.csdn.net/int64ago/article/details/7429868
这里比较坑的就是区间求和,对于两个点(x1,y1)(x2,y2)中间区间的区间和是这样的
sum(x2,y2)-sum(x1-1,y2)-sum(x2,y1-1)+sum(x1-1,y1-1);会减去重复部分,所以要加回来,这个画图还是可以理解的,一开始可能反应不过来,为了防止死循环,我把每个点的横纵坐标都加一,比较安全。
代码:
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#include<map>
#include<stack>
#include<cmath>
#include<vector>
#include<set>
#include<cstdio>
#include<string>
#include<deque>
using namespace std;
typedef long long LL;
#define eps 1e-8
#define INF 0x3f3f3f3f
#define maxn (1<<10)+2
LL a[maxn][maxn];
int n,m,k,t;
int op,x1,x2,yy1,y2,value;
int lowbit(int x){
return x&(-x);
}
void add(int x,int y,int value){//二维树状数组单点修改
for(int i=x;i<maxn;i+=lowbit(i)){
for(int j=y;j<maxn;j+=lowbit(j)){
a[i][j]+=value;
}
}
}
LL sum(int x,int y){//二维树状数组区间求和
LL ans=;
for(int i=x;i>;i-=lowbit(i)){
for(int j=y;j>;j-=lowbit(j)){
ans+=a[i][j];
}
}
return ans;
}
int main()
{
while(scanf("%d",&op)!=EOF){
scanf("%d",&n);
memset(a,,sizeof(a));
while(scanf("%d",&op)&&op!=){
if(op==){
scanf("%d%d%d",&x1,&yy1,&value);
x1++;
yy1++;
add(x1,yy1,value);
}else if(op==){
scanf("%d%d%d%d",&x1,&yy1,&x2,&y2);
x1++;
yy1++;
x2++;
y2++;
LL ans=sum(x2,y2)-sum(x1-,y2)-sum(x2,yy1-)+sum(x1-,yy1-);
printf("%lld\n",ans);
}
}
}
return ;
}
二维树状数组poj1195的更多相关文章
- poj1195(二维树状数组)
题目链接:https://vjudge.net/problem/POJ-1195 题意:有s*s的矩阵,初始化为全0,有两种操作,单点修改(x,y)的值,区间查询(x,y)的值(l<=x< ...
- POJ-1195 Mobile phones---裸的二维树状数组(注意下标从1,1开始)
题目链接: https://vjudge.net/problem/POJ-1195 题目大意: 直接维护二维树状数组 注意横纵坐标全部需要加1,因为树状数组从(1,1)开始 #include<c ...
- 二维树状数组(水题) POJ1195
前段时间遇到线段树过不了,树状数组却过了的题.(其实线段树过得了的) 回忆了下树状数组. 主要原理,还是二进制位数,每一项的和表示其为它的前((最后一位1及其后)的二进制数)和,可从二进制图来看.(用 ...
- 【POJ1195】【二维树状数组】Mobile phones
Description Suppose that the fourth generation mobile phone base stations in the Tampere area operat ...
- poj1195二维树状数组模板
二维树状数组和一维的也差不多,改一下add和query函数即可:即按行修改,行内单点修改即可 /* 二维树状数组,询问一个二维区间内的数之和 */ #include<iostream> # ...
- 【poj1195】Mobile phones(二维树状数组)
题目链接:http://poj.org/problem?id=1195 [题意] 给出一个全0的矩阵,然后一些操作 0 S:初始化矩阵,维数是S*S,值全为0,这个操作只有最开始出现一次 1 X Y ...
- POJ1195(二维树状数组)
Mobile phones Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 17176 Accepted: 7920 De ...
- 二维树状数组 BZOJ 1452 [JSOI2009]Count
题目链接 裸二维树状数组 #include <bits/stdc++.h> const int N = 305; struct BIT_2D { int c[105][N][N], n, ...
- HDU1559 最大子矩阵 (二维树状数组)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1559 最大子矩阵 Time Limit: 30000/10000 MS (Java/Others) ...
随机推荐
- /etc/profile ~/.bash_profile ~/.bashrc 等文件的执行过程 和 区别
/etc/profile :系统的所有用户共享 ~/.bash_profile:仅针对当前用户有效 我的电脑只用于开发,因此全部配置/etc/profile 参考链接: https://blog.cs ...
- 用turtle画图
turtle是python自带一个寓教于乐的小乌龟,可以控制乌龟移动(机器人),可以留下足迹. turtledemo里有许多官方例子.刚才随性而发做,看了介绍随手画了一个,有点像自动原包机,通过简单的 ...
- html总结2
(1)选择器: 1.标签选择器:用于修饰同类HTML标签的共性风格 <style type="text/css"> li{ color:red; font-size:2 ...
- docker之 网络模式和跨主机通信
Docker的四种网络模式Bridge模式 当Docker进程启动时,会在主机上创建一个名为docker0... Docker的四种网络模式 Bridge模式 当Docker进程启动时,会在主机上创建 ...
- Redis 集群知识点及命令
Redis 集群命令 备注 cluster nodes 查看集群包含的节点 cluster meet <ip> <port> 将 ip 和 port 所指定的节点添加到 nod ...
- 函数和对象 及 prototype和__proto__
对象有 __proto__ 函数有 prototype 对象的__proto__指向构造自己的函数的prototype 但有一例外 var Obj = {v:99}var pObj = Object ...
- docker镜像制作 centos6 nginx1.15.6 with NGINX_UPSYNC_MODULE
首先我选择了在centos6里部署nginx的镜像,如果大家选择的是centos7,自己重新修改吧 这里的问题点有几个: 1,make的版本选择,因为我下载了最新的cmake,需要c++11编译 这玩 ...
- SpringBoot配置(1) 配置文件application&yml
SpringBoot配置(1) 配置文件application&yml 一.配置文件 1.1 配置文件 SpringBoot使用一个全局的配置文件,配置文件名是固定的. application ...
- SpringBoot入门(0) HelloWorld的实现与原理分析
SpringBoot(0) HelloWorld的实现与原理分析 一.环境准备 1.1 环境约束 –jdk1.8:Spring Boot 推荐jdk1.7及以上:java version “1.8.0 ...
- Oracle中存储图片的类型为BLOB类型,Java中如何将其读取并转为字符串?
一,读取图片转为String类型: 需要使用Sun公司提供的Base64工具 String str = ((Map) list1.get(0)).get("EINVOICEFILE" ...