POJ-2155-Matrix二位树状数组应用
题目:
一个只有0和1构成的二维平面,给你两种指令,一种是区间的更新,即0变为1,1变为0;一种是查询一个点是1还是0;
由于是二进制,所以每次更新在相应的点上加一,最后对2取余即可。
至于二维的树状数组的应用原理,我也是看了这篇论文才明白;
国家队论文集/2009/武森《浅谈信息学竞赛中的“0”和“1”》
我就在补充一下AC代码;
#include <cstdio>
#include <iostream>
#include <cstring>
#include <string> typedef long long LL; using namespace std; int T,M,n,c[][];
char str[]; LL lowbit(LL x)
{
return x & -x;
} void add(LL a,LL b,LL cont)
{
for(int i=a;i<=n;i+=lowbit(i))
{
for(int j=b;j<=n;j+=lowbit(j))
{
c[i][j]+=cont;
}
}
} LL getsum(LL a,LL b)
{
LL sum=;
for(LL i = a;i>;i-=lowbit(i))
{
for(LL j = b;j>;j-=lowbit(j))
{
sum+=c[i][j];
}
}
return sum;
} int main(){
scanf("%d",&T);
while(T--)
{ scanf("%d%d",&n,&M);
memset(c,,sizeof(c));
for(int i=;i<=M;i++)
{
scanf("%s",str);
if(str[]=='C')
{
LL x1,y1,x2,y2;
scanf("%lld%lld%lld%lld",&x1,&y1,&x2,&y2);
add(x1,y1,); //分别对二维四个点进行更新
add(x1,y2+,);
add(x2+,y1,);
add(x2+,y2+,);
}
else if(str[]=='Q')
{
LL x,y;
scanf("%lld%lld",&x,&y);
printf("%lld\n",getsum(x,y)%);
}
}
if(T!=)printf("\n");
} return ;
}
POJ-2155-Matrix二位树状数组应用的更多相关文章
- POJ 2155 Matrix(二维树状数组,绝对具体)
Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 20599 Accepted: 7673 Descripti ...
- poj 2155 Matrix (二维树状数组)
题意:给你一个矩阵开始全是0,然后给你两种指令,第一种:C x1,y1,x2,y2 就是将左上角为x1,y1,右下角为x2,y2,的这个矩阵内的数字全部翻转,0变1,1变0 第二种:Q x1 y1,输 ...
- POJ 2155:Matrix 二维树状数组
Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 21757 Accepted: 8141 Descripti ...
- 【poj2155】【Matrix】二位树状数组
[pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=34310873 Description Given ...
- [poj2155]Matrix(二维树状数组)
Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 25004 Accepted: 9261 Descripti ...
- 【poj2155】Matrix(二维树状数组区间更新+单点查询)
Description Given an N*N matrix A, whose elements are either 0 or 1. A[i, j] means the number in the ...
- HDU4456-Crowd(坐标旋转+二位树状数组+离散化)
转自:http://blog.csdn.net/sdj222555/article/details/10828607 大意就是给出一个矩阵 初始每个位置上的值都为0 然后有两种操作 一种是更改某个位置 ...
- POJ 2029 (二维树状数组)题解
思路: 大力出奇迹,先用二维树状数组存,然后暴力枚举 算某个矩形区域的值的示意图如下,代码在下面慢慢找... 代码: #include<cstdio> #include<map> ...
- poj----2155 Matrix(二维树状数组第二类)
Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 16950 Accepted: 6369 Descripti ...
随机推荐
- 关于引入js文件乱码的问题
对于大多数的web页面,我们一般都是使用如下两种编码:UTF-8.GB2312.所以我们只需要同意页面和js编码就可以解决乱码问题: 对于GBK页面引用编码为UTF-8编码的JavaScript文件如 ...
- Linux系统管理----账号与权限管理作业习题
1.创建/guanli 目录,在/guanli下创建zonghe 和 jishu 两个目录(一条命令) 创建目录:mkdir +目录 [root@localhost chen]#mkdir /guan ...
- python 简单的实现文件内容去重
文件去重 这里主要用的是set()函数,特别地,set中的元素是无序的,并且重复元素在set中自动被过滤. 测试文本为 data.txt 具体代码如下: // 文件去重 #!/usr/bin/env ...
- JavaScript数据结构——集合的实现与应用
与数学中的集合概念类似,集合由一组无序的元素组成,且集合中的每个元素都是唯一存在的.可以回顾一下中学数学中集合的概念,我们这里所要定义的集合也具有空集(即集合的内容为空).交集.并集.差集.子集的特性 ...
- 异步编程CompletableFuture实现高并发系统优化之请求合并
先说场景: 根据Redis官网介绍,单机版Redis的读写性能是12万/秒,批量处理可以达到70万/秒.不管是缓存或者是数据库,都有批量处理的功能.当我们的系统达到瓶颈的时候,我们考虑充分的压榨缓存和 ...
- 按需制作最小的本地yum源
[需求背景] 有时候客户的环境里面只能离线安装文件,此时可以使用CentOS的ISO光盘作为本地源进行安装,或者是制作一个包含了YUM源服务的虚拟机. 无论上面的哪一种方式都不够轻量,我们自己的组件可 ...
- k8s学习02-----kubeadm部署k8s
机器规划 系统配置 三台机器都执行 1.关闭selinux及firewalld sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux ...
- Kubernetes Pod 驱逐详解
原文链接:Kubernetes Pod 驱逐详解 在 Kubernetes 中,Pod 使用的资源最重要的是 CPU.内存和磁盘 IO,这些资源可以被分为可压缩资源(CPU)和不可压缩资源(内存,磁盘 ...
- JVM总结(一)
JVM总结(1) 1.JVM组成: JVM由类加载器子系统.运行时数据区.执行引擎以及本地方法接口组成. 2.JVM运行原理: Java源文件经编译器,编译成字节码程序,通过JVM将每一条指令翻译成不 ...
- 转载 | CSS实现单行、多行文本溢出显示省略号(…)
本文引自:https://www.cnblogs.com/wyaocn/p/5830364.html 首先,要知道css的三条属性. overflow:hidden; //超出的文本隐藏 text-o ...