POJ 2155 Matrix(二维树状数组)

矩阵修改(二维线段树、矩形树) 矩阵修改(二维线段树、矩形树) 阅读详情
Matrix
Time Limit: 3000MS Memory Limit: 65536K
Total Submissions: 28817 Accepted: 10507

Description

Given an N*N matrix A, whose elements are either 0 or 1. A[i, j] means the number in the i-th row and j-th column. Initially we have A[i, j] = 0 (1 <= i, j <= N). 

We can change the matrix in the following way. Given a rectangle whose upper-left corner is (x1, y1) and lower-right corner is (x2, y2), we change all the elements in the rectangle by using "not" operation (if it is a '0' then change it into '1' otherwise change it into '0'). To maintain the information of the matrix, you are asked to write a program to receive and execute two kinds of instructions. 

1. C x1 y1 x2 y2 (1 <= x1 <= x2 <= n, 1 <= y1 <= y2 <= n) changes the matrix by using the rectangle whose upper-left corner is (x1, y1) and lower-right corner is (x2, y2). 
2. Q x y (1 <= x, y <= n) querys A[x, y]. 

Input

The first line of the input is an integer X (X <= 10) representing the number of test cases. The following X blocks each represents a test case. 

The first line of each block contains two numbers N and T (2 <= N <= 1000, 1 <= T <= 50000) representing the size of the matrix and the number of the instructions. The following T lines each represents an instruction having the format "Q x y" or "C x1 y1 x2 y2", which has been described above. 

Output

For each querying output one line, which has an integer representing A[x, y]. 

There is a blank line between every two continuous test cases. 

Sample Input

1
2 10
C 2 1 2 2
Q 2 2
C 2 1 2 1
Q 1 1
C 1 1 2 1
C 1 2 1 2
C 1 1 2 2
Q 1 1
C 1 1 2 1
Q 2 1

Sample Output

1
0
0
1

Source

POJ Monthly,Lou Tiancheng


很经典的二维树状数组题目,网上有很多优秀的文章。查询点转化为查询区间的题目。

一维的类似题目


#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
using namespace std;
#define  LL long long
const int N = 1000;
int n,Q;
int sum[N+3][N+3];
int lowbit(int x)
{
    return x&-x;
}
void add(int x,int y)
{
    for(int i=x;i<=n;i+=lowbit(i))
    {
        for(int j=y;j<=n;j+=lowbit(j))
        {
            sum[i][j]++;
        }
    }
}
int query(int x,int y)
{
    int ans=0;
    for(int i=x;i>=1;i-=lowbit(i))
    {
        for(int j=y;j>=1;j-=lowbit(j))
        {
            ans+=sum[i][j];
        }
    }
    return ans;
}
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d %d",&n,&Q);
        memset(sum,0,sizeof sum);
        while(Q--)
        {
            char c;
            
            cin>>c;
            if(c=='C')
            {
                int x1,x2,y1,y2;
                scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
                add(x1,y1);
                add(x2+1,y2+1);
                add(x2+1,y1);
                add(x1,y2+1);
            }
            else
            {
                int x,y;
                scanf("%d %d",&x,&y);
                int ans=query(x,y);
                printf("%d\n",ans%2);
            }
        }
        if(T) printf("\n");
    }
    
}


C语言实现AES加解密 C语言实现AES加解密 #include<stdio.h> #include<string.h> #include<time.h> #include<windows.h> #define Nb 4 //数据块行数 #define Nk 4 //密码块行数 #define Nr 10 //轮加密次数 unsigned char RoundKey[4*Nb*(Nr+1)]; //轮密钥 unsigned char Key[17]; 阅读详情

相关推荐

Jetson Orin NX上PyTorch环境搭建与性能优化指南

本文详细指导如何在Jetson Orin NX上搭建高效的PyTorch开发环境。内容涵盖CUDA与cuDNN的“隐藏”配置、Miniconda虚拟环境管理、PyTorch for Jetson的正确安装与验证,并提供了电源模式设置、TensorRT加速、混合精度等关键性能优化实战技巧,帮助开发者充分释放边缘AI设备的算力。

weixin_29090089的博客 338

(二维) Matrix (P2155)

这个不能过,我都不知道为什么了,, #include #include #include #include #include using namespace std; #define N 2000 int n; int q; int go[N][N]; int low(int k) { return k&(-k); } void update(int x,int y,int v)

jiangjiashi的博客 618

开源CMDB与资产管理平台对比报告

本文对比分析了9款主流开源CMDB平台,从集成能力、功能完整性和多语言支持三个维度进行评测。重点介绍了VeCMDB、蓝鲸CMDB、WeCMDB和OpsAny等国产平台的特色:VeCMDB以动态模型和自动发现见长;蓝鲸CMDB适合超大规模企业级应用;WeCMDB专注金融级高并发场景;OpsAny提供一体化运维解决方案。针对不同规模企业给出选型建议:中小团队推荐Snipe-IT等轻量工具;大型企业建议蓝鲸或WeCMDB;需国产化适配的可选VeCMDB或OpsAny。文章还特别指出iTop、GLPI等适合ITIL

huang0612123的博客 1081

[POJ - 2155] Matrix (二维树状数组)

链接 http://poj.org/problem?id=2155 题意 给你一个n×nn\times nn×n的矩阵,现在让你对它进行kkk次操作,共两种,第一种是告诉你(x1, y1),(x2, y2)(x1,\ y1),(x2,\ y2)(x1, y1),(x2, y2),对于 x1≤x≤x2x1\leq x\leq x2x1≤x≤x2及y1≤y≤y2...

梧桐 247

算法 | 基于灰狼优化算法的无人机三维路径规划方法研究(附matlab代码)

针对复杂环境下的无人机三维路径规划问题,本文提出一种基于灰狼优化算法(Grey Wolf Optimizer, GWO)的解决方案。通过模拟灰狼群体的社会等级与协作捕猎机制,结合动态参数调整策略,优化路径长度与避障性能。实验表明,相较于粒子群优化(PSO)和遗传算法(GA),GWO算法在收敛速度与路径成本上分别提升约25%和18%,且在三维城市地形中表现出更强的避障鲁棒性。本文提供完整的MATLAB代码实现,为无人机自主导航提供理论与技术支撑。

尘世冰封的专栏 287

『OPEN3D』1.2 mesh处理 python篇

介绍open3d对mesh的基本处理操作

NNNNNathan的博客 4648

[UOJ #82][UR #7]水题生成器

原题链接emm 第一次听说这种东西呢 阶乘进位制#include<iostream> #include<cstring> #include<algorithm> #include<cstdio> #include<cmath> #include<queue> #include<vector> #include<climits> #include<string> #include<cstdlib>

今天的北宅依旧没有回家 334

【AI智能体】Dify 搭建个人专属简历美化助手操作详解

Dify 搭建个人专属简历诊断助手实战操作详解

congge 4382

区间修改矩阵与查询(树状数组)

例题: 题意: 给定矩阵大小,一开始全部元素都为0。操作1将一块区域取反;操作2回答区域有多少个1. 做法: 树状数组维护二维差分,将区间操作变为单点操作。 是差分数组。 差分数组的前缀和就是单点的值,而这里求的是区间的值,那就是差分数组前缀和后,变为单点的值,单点的前缀和才是区间的值。就是下面这个式子了。这个式子的意思是的前缀和。 为了方便维护,拆分为这四个式子。 类比一维的树状数组,表示右端点为,长为的区间和。 二维的那就是,表示右下角为,高,宽的区间的区间和。 所以树状数组也就

ATXTKS的博客 503

RK3568 Android14 移远GNSS卫星导航模组LC760Z GPS北斗定位模块调试

Rockchip RK3568 作为一款高性能、低功耗的国产SoC,被广泛应用于工业网关、车载中控和智能手持终端等领域。在这些应用场景中,位置服务(Location Service) 往往是不可或缺的功能。本文将详细记录如何集成GPS模组到 RK3568 开发板上,通过 UART(串口)接口集成通用的 GPS 模块(如 移远LC760Z 或 EC20 4G 模块自带的 GPS 功能也差不多),并实现数据的解析与上层应用对接。

qq_33427070的博客 1414

SAP UI5 主题设置全解析:从启动参数到运行时切换、跨域白名单与事件监听

SAP UI5主题体系深度解析:从配置到切换的完整指南 摘要:SAP UI5主题机制远不止CSS换肤,其工程化实践涵盖启动配置、运行时API切换、跨库路径映射及安全管控等关键环节。通过bootstrap标签或URL参数设置初始主题,运行时可用Theming.setTheme无刷新切换。自定义主题需配置theme-roots路径,跨域加载需声明sap-allowed-theme-origins白名单。主题切换完成后会触发applied事件,适合执行视觉同步操作。该体系支持多品牌适配、集中式主题管理,在Fior

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 328

POJ2155 - Matrix(二维树状数组)

POJ2155 - Matrix 文章目录题目题解:代码 题目 给你一个二维矩阵,初始化为0,然后可以进行两次操作: C:x,y,x1,y2 对该小矩阵内的数进行取反 Q:查询某个点是0还是1 题解: C是区间修改,Q是单点查询, 我们将二维矩阵先简化成一维矩阵的情况,C是对一段区域[l,r]取反,我们没有必要对这段区域全部操作,我们只需要对点l和点(r+1)分别加1即可,然后查询k时,我们只需要求出k的前缀和,然后mod2即可 为什么? 如果,当k1在区间[l,r]里,k的前缀和比之前就了一个1,mod

qq_35975367的博客 566

库存优化技术提升电商效率

第一部分:库存优化技术基础 第1章:库存优化的基本概念 库存优化是现代电商运营中至关重要的一个环节。简单来说,库存优化指的是通过一系列的策略和技术手段,使得库存管理更加高效、准确,从而降低运营成本,提高销售额。 1.1 库存优化的定义与重要性

AI天才研究院 1248

二维树状数组-POJ 2155 Matrix

什么是树状数组? 简单来说,就是暴力遍历数组来解决区间问题等,不过遍历的路径使用了位运算来进行压缩,复杂度是O(log2(n))这样就不会超时了(为所欲为?)。 lowbit()操作 其核心是神奇的lowbit操作,lowbit(x)=x&(-x),它的功能是找到x的二进制数的最后一个1,原理是利用负数的补码表示,补码是原码取反加一。例如x=6=00000110(2),-x=x补=11111010(2),那么lowbit(x)=x&(-x)=10(2)=2。 从lowbit()引出数组a[],a[x]的值

有一分热,发一分光。 5183

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

二维树状数组_POJ2155_Matrix

POJ2299_Ultra-QuickSort题目连接这道题我用的是二维树状数组来做得,做法比较简单,都是二维树状数组的基本操作。 操作1: C: 给一个子矩阵进行非操作,这个可以用操作次数的叠加来进行,初始操作次数为0,然后每进行一次操作就加1,用的是树状数组更新函数,主要是对四个区域,即调用add(x1,y1),add(x1,y2+1),add(x2+1,y1),add(x2+1,y2+1)

ggeh_f的博客 393

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

POJ2155 Matrix(二维树状数组)

POJ2155 Matrix(二维树状数组) 分析:首先该题为区间修改,点查询。 首先我们把问题降维,我们在一个一维数组中,每次修改区间[x1,y1]内的数翻转,然后查询位于a[x]的当前值。对于每个区间[x1,y1]翻转操作,我们只需要add(x1,1)和add(y1+1,1)操作就行,做完这步我们保证sum(x)的值就是a[x]被翻转的总次数。自己画个数轴验证下看看是不是?    当我们

code 726

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

poj 2155 Matrix(二维树状数组)

楼教主出的二维树状数组。给出矩阵左上角和右下角坐标,矩阵里的元素 1变0 ,0 变1,然后给出询问,问某个点是多少。纠结好久了,一直没什么好思路,看discuss说四个角神马的,我搜了下,理解了,树状数组里记录该点的变幻次数,或者直接%2也行。查询的时候Getsum得到的是该点在所有区间的总变幻次数,最后%2就是结果。建图的时候死活想不通,杂四个点的坐标是那个 = =。。。刚才协会开会了,在路上想通了,我想的0,0坐标是类似坐标轴的那种,在左下角。。。而矩阵的0 0 应该是在左上角。。这样,什么都通了 =

小媛在努力~ 1万+

POJ 2155 Matrix 二维树状数组

题目来源:POJ 2155 Matrix 题意:开始矩阵都是0 2种操作 把某个子矩阵翻转 0变1 1变0 查询x y 是0还是1 思路:树状数组 记录翻转次数就行 奇数次是1 偶数次是0  这题是区间更新 点查询   向上求和 向下更新 而且是二维的 #include #include using namespace std; const int maxn = 1300; i

嗯。 1135

POJ - 2155 Matrix 二维树状数组 (区间更新,单点查询)

POJ - 2155 Matrix 二维树状数组 没学过的可以看这篇博客:http://www.cnblogs.com/RabbitHu/p/BIT.html 矩阵中每个元素初始化为 0 ,每次更新,相应矩阵中的 0 变为 1 ,1 变为 0 。 更新时只需加 1 ,最后对 2 取模即为答案。  #include&lt;cstdio&gt; #include&lt;cstring&gt; ...

没有梦想何以远行 175

POJ_2155 Matrix 【二维树状数组】

一、题面 POJ2155 二、分析   楼教主出的题,是二维树状数组非常好的题,还结合了开关问题(开关变化的次数如果为偶数,状态不变,奇数状态相反)。   题意就是给了一个二维的坐标平面,每个点初始值都是0,然后给一个矩形的区域,对该区域的点的状态进行反转。然后在中间插有查询,查该点的状态。   其实,还是对反转次数的一个研究,这里为了能快速的查找一个点的反转次数,加上又是二维,且有区间...

weixin_30349597的博客 148

POJ2155 Matrix 二维树状数组

题目链接:http://poj.org/problem?id=2155 题目大意:N * N 的矩阵,每个元素要么是0,要么是1,开始全0不断进行两种操作: (1)C x1 y1 x2 y2 表示要将左上角为(x1,y1),右下角为(x2,y2)的子矩阵里的全部元素都取反(0变1,1变0)(1 (2)Q x y 查询(x,y)处元素的值。 分析:HDU3584 Cube的简

AC_Gibson的专栏 510

poj 2155 Matrix (二维树状数组)

这是楼教主出的二维线段树或者是二维树状数组的题,题意很简单,就是有个n*n的矩阵,初始值都是0,然后给你左上角和右下角的坐标,把这个长方形的区间所有元素反转一下,然后问某个具体坐标的值。 这里我用了二维的线树状数组,一维树状数组可以解决区间更新和点查询的问题,这里只需要加一维就可以了,代码比较好写,不过开始犯了很多低级的错误。 //=======...

113

二维树状数组 —— POJ 2155 Matrix

二维树状数组 —— POJ 2155 Matrix

大田二十 519

POJ2155 - Matrix (二维树状数组)

题目链接:http://poj.org/problem?id=2155题目大意:给定一个矩阵,初始化为0,现在可以进行两种操作,一种是查询某个点的值是 0 还是 1。另一种是让这个矩阵的一个子矩阵内的值取反。解题过程:省赛选拔赛的题,太难了直接没看……… 后来补起来,有模板还是挺容易的。题目分析: 首先这题虽然看起来像是一个区间修改,单点查询的题,但是可以转化成单点修改,查询区间和。首先考虑一维

ACM_Fish的博客 3647

POJ 2155 Matrix【二维树状数组】POJ 2155【

Description Given an N*N matrix A, whose elements are either 0 or 1. A[i, j] means the number in the i-th row and j-th column. Initially we have A[i, j] = 0 (1 <= i, j <= N). We can change...

dianxuanzhi1019的博客 131

[POJ2155] Matrix - 二维树状数组

题目描述给一个N*N的矩阵A,其中元素是0或1。A[i][j]表示在第i行第j列的数。最初时,A[i][j]=0(1<=i,j<=N)。我们以以下方式来改变矩阵,给定一个矩形的左上角为(x1,y1)和右下角为(x2,y2),我们对这个矩形范围内的所有元素进行“非”操作(如果它是一个’0’,那么变化为’1’,否则它变为’0’)。请你编写一个程序完成以下两种操作: 1. C x1 y1 x2 y2 (

Bill_Yang_2016的博客 485
上一篇: HDU 6053 TrickGCD(枚举)
下一篇: HDU 1892 See you~(二维树状数组 单点更新)
Mr_Treeeee
博客等级 码龄10年 38粉丝 551原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值