POJ2155 - Matrix (二维树状数组)

手势控制 Python !Leap Motion Python 开发教程 (二) 手势控制 Python !Leap Motion Python 开发教程 (二) 现在进入正题,我来给大家总结一下我在使用 Leap Motion 开发过程中的经验以及学到的东西,其中我会概括以及翻译官方给出的注释,为了让这些注释更加通俗易懂,让大家更好理解。 回顾 在上一篇文章中我们讲了如何配置 Leap Motion 的 Python 2.7 的开发环境,如果您还没有配置好您的开发环境,可以参... 阅读详情

题目链接:

http://poj.org/problem?id=2155


题目大意:

给定一个矩阵,初始化为0,现在可以进行两种操作,一种是查询某个点的值是 0 还是 1。另一种是让这个矩阵的一个子矩阵内的值取反。


解题过程:

省赛选拔赛的题,太难了直接没看………
后来补起来,有模板还是挺容易的。


题目分析:

  • 首先这题虽然看起来像是一个区间修改,单点查询的题,但是可以转化成单点修改,查询区间和。

    • 首先考虑一维的情况,我要一段区间取反,假设是 [l, r]。那么我只需要book[l]+1,book[r+1]+1,假设查询 k 的时候,只需要查询前 k 的和 mod 2 的结果即可。
    • 然后这种方法可以推广到二维,不过这里要用一下容斥原理。假设修改的子矩阵左上角和右下角分别为 x1 y1 x2 y2,首先book[x1][y1]+1, book[x2][y2]+1,不过这时要 book[x1][y2+1]+1, book[x2+1][y1]+1。

    • 这里写图片描述

    • 这里红色的就是上面需要标记的点,标记后表示以这个点为左下角的子矩阵内的点全部取反一次。这里绿色代表取反一次,紫色是取反了两次,黄色是取反了四次。最后实际进行取反操作的就是要求取反的子矩阵内的点。

  • 注意这里的前缀和用二位树状数组维护,进行单点更新,单点查询。

AC代码:

#include<cstdio>
#include<cstring>
using namespace std;

const int MAX = 1123;
int data[MAX][MAX], n;

int lowbit(int x) {
    return x&-x;
}

void Add(int x, int y, int w) {
    for (int i = x; i <= n; i += lowbit(i)) {
        for (int j = y; j <= n; j += lowbit(j)) {
            data[i][j] += w;
        }
    }
}

int Sum(int x, int y) {
    int ans = 0;
    for (int i = x; i > 0; i -= lowbit(i)) {
        for (int j = y; j > 0; j -= lowbit(j)) {
            ans += data[i][j];
        }
    }
    return ans;
}

int main() {
    char str[10];
    int T;
    scanf("%d", &T);
    while (T--) {
        int k;
        scanf("%d %d", &n, &k);
        memset(data, 0, sizeof(data));
        while (k--) {
            scanf(" %s", str);
            if (str[0] == 'C') {
                int x1, x2, y1, y2;
                scanf("%d %d %d %d", &x1, &y1, &x2, &y2);
                Add(x1, y1, 1);
                Add(x2+1, y1, 1);
                Add(x1, y2+1, 1);
                Add(x2+1, y2+1, 1);
            }
            else {
                int x, y;
                scanf("%d %d", &x, &y);
                printf("%d\n", Sum(x, y)%2);
            }
        }
        if (T)
            printf("\n");
    }
}
LLC型自驱动半桥谐振变换器:电压电流变化与自然换向解析 变换器的工作状态经历了多个阶段,从模态一的关断状态,到模态二和三的电流供电状态,每个阶段都得到了合理的设计和优化。的工作原理,尤其是在半个周期内的电压和电流变化。上图 展示了该变换器在工作时的电压和电流波形,它为我们揭示了变换器如何通过精确的电流和电压控制,优化性能并实现高效能转换。,并根据负载情况调整电流和电压的工作模式,能够极大提升变换器的效率,尤其是在零电压开通和自然换向的设计中,发挥着关键作用。这意味着,电流会随着时间周期的变化,呈现典型的振荡波形,从而达到良好的电流控制。是两个关键的电流变量。 阅读详情

相关推荐

概率整形 Peobabilistic Shaping PS 第一节

概率整形概述 概率整形(Peobabilistic Shaping, PS)是一种针对于调制格式的优化技术,它为光通信通信提供了非常高的灵活性,但不会增加系统复杂性。尤其是光通信中的非线性问题会限制功率,使得PS就像为光通信量身定做的一样。 PS技术能够在不增加发送功率的前提下,获得高频谱效率和传输容量。2016年在使用PS技术的实验中实现了6600km单模光纤的65Tbit/s数据的传输。 到目前位置PS技术的研究主要集中在具有相干检测的单载波光纤传输。 概率整形的基本原理 概率整形技术就是通过在编码前

Explore_OuO的博客 8126

树状数组(详细分析+应用),看不懂打死我!

树状数组介绍 在学习一个算法之前一定要清楚它能干嘛,能解决什么样的问题,对你解题是否有帮助,然后才去学习它! 那么接下来看如下几个问题 什么是树状数组 顾名思义就是一个结构为树形结构的数组,于二叉树的结构类似但又不同,它是在二叉树的结构上删除了一些中间节点,来看两幅图就明白了. 1.这是二叉树的结构 2.这是树状数组的结构 不难发现,树状数组相比于二叉树删除了一些节点,但是为什么要删除呢?这就和树状数组的一些性质(lowbit)有关了,不懂没关系,继续往下看. 树状数组可以解决什么问题呢? 可以解决大部

TheWayForDream 8万+

ABAP代码检查(Code Review)

1、SLIN 扩展程序检查 也可通过(SE38工具栏->检查-扩展程序检查) 进入 2、ATC 检查 通过<SE38菜单栏-检查-ABAP测试主控室> 或事物代码SCI, 支持自定义检查变式 SCI可以配置检查变式满足特殊需求,配置对象集用于批量检查 3、通过ABAP测试主控室实现统一管理,定期检查作业和监控功能(事务代码ATC) 参考 SLIN...

u012232542的博客 6063

树状数组详解

文章目录前言一、树状数组概括二、树状数组的应用1.单点修改+区间查询总结 前言 树状数组或二叉索引树(Binary Indexed Tree),又以其发明者命名为 Fenwick 树。其初衷是解决数据压缩里的累积频率的计算问题,现多用于高效计算数列的前缀和、区间和。它可以以 O(logn) 的时间得到任意前缀和。并同时支持在 O(logn) 时间内支持动态单点值的修改。空间复杂度 O(n)。 一、树状数组概括 树状数组是一个查询和修改复杂度都为log(n)的数据结构。主要用于数组的单点修改&

萧何山的博客 2万+

MAC-H3C官网inode客户端下载安装

MAC-H3C官网inode客户端下载安装

兴趣是最好的老师 1万+

20、微电网系统的系统框架、建模与控制架构解析

本文详细解析了微电网系统的系统框架、建模方法以及控制架构。文章首先介绍了在系统的系统(SoS)框架下,微电网如何通过微控制器(MC)和微电网中央控制器(MGCC)协调运行,并支持并网与孤岛模式下的高效能量管理。随后,针对微电网的关键组件,包括微涡轮机、光伏太阳能电池和风力涡轮机,提供了详细的数学建模分析。最后,探讨了微电网的控制架构设计,涵盖分层控制和共识控制策略,以实现系统的高效、稳定运行,满足日益增长的能源需求与市场要求。

elastic6hunter的博客 206

树状数组(超详细)

树状数组千字精华讲解

Jiguoyuanyic的博客 4225

【华为机试真题 Python实现】分苹果

《华为机试真题》专栏含牛客网华为专栏、华为面经试题、华为OD机试真题。如果您在准备华为的面试,期间有想了解的可以私信我,我会尽可能帮您解答,也可以给您一些建议!本文解法非最优解(即非性能最优)。A,B两个人把苹果分为两堆,A希望按照它的计算规则等分苹果,他的计算规则是按照二进制加法计算,并且不计算走位,12+5=9(1100+0101=9), B的计算规则是十进制加法,包括正常进位,B希望在满足A的情况下获取苹果重量最多,输入苹果的数量和每个苹果重量,输出满足A的情况下获取的苹果总重量, 如果无法满足A的要

3413

【高级数据结构】树状数组

树状数组(BinaryIndexedTree,BIT)(Binary Indexed Tree,BIT)(BinaryIndexedTree,BIT)是利用数的二进制特征进行检索的一种树状的结构。如何利用二分的思想高效地求前缀和? 如图4.74.74.7所示, 以AAA =[a1,=[a_1,=[a1​,a2a_2a2​ ,a3a_3a3​…a8]a_8]a8​]为例,将二叉树的结构画成树状。这幅图是树状数组的核心,理解了它,就能明白树状数组的一切操作。图4.74.74.7圆圈中标记有数字的节点,存储的是称

Antonio915的博客 6175

仅使用 Python 创建的 Web 应用程序(前端版本)第03章Streamlit-多页面

接下来,我们将解释多页面切换。Streamlit 没有“多页面”或“页面路由”等功能。另一方面,通过根据用户动作切换要执行的功能,可以使其看起来好像存在“多个页面”。注意:我认为它类似于 SinglePageApplication (SPA)。然而,根据 React、Vue 等中使用的 URL 路径来更改页面的路由很困难。还有一个用于获取查询参数的实验性 API,但如果您确实需要这种功能,我认为认真尝试编写 React 或 Vue 是个好主意。我们来看一个通过按下按钮来切换页面的示例,如下所示。

xianyinsuifeng的博客 1328

Qt Android MySql 数据库驱动编译(详细图解步骤)

第一步.先介绍下环境搭建: Qt 版本 5.12.11 下载链接 https://download.qt.io/archive/qt/5.12/5.12.11/qt-opensource-linux-x64-5.12.11.run Ubuntu 18.04.6 LTS 下载链接 JDK版本 1.8.0_191 下载链接https://www.oracle.com/java/technologies/downloads/ Android Studio版本 ...

h a 6 6 6 c k 为 你解决复杂难题! 3381

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

uniapp [全端兼容] - 详细实现全局修改设置字体大小功能效果,统一修改页面字号字体大小,一键改变字号整个项目立即生效,大中小字号预设、老年人大字模式场景,uniApp全平台兼容控制页面字号大小

uni-app,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,修改字体大小,一键调整UniApp字体大小,实时改变不用刷新,动态设置字体大小,uniapp全局修改字体字号大小,如何控制全局字号,可调整显示的字体,全项目生效,老年人大字模式,改变所有页面的字体,全局设置字体大小,实现小中大的字体切换,设置改变全局字体大小功能,如何做到全平台兼容,H5APP实现全局字体大小调整,不兼容报错,用户设置字号,全局设置应用字体大小,大中小字体修改,页面设置page-me

🏆 前端领域优质创作者 1万+

二维树状数组-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]的值

有一分热,发一分光。 5182

OV9734 DATASHEET,完整规格书

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

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

二维树状数组_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

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

POJ2155 Matrix(二维树状数组)

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

code 726

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

POJ 2155 Matrix(二维树状数组)

  题目链接:http://poj.org/problem?id=2155        题意是给一个n*n的全是0的矩阵,然后有T次询问,有两种操作,一是让(x1,y1)到(x2,y2)的值取反(0变1,1变0),第二个是询问(x,y)的值。        暴力大法好,但是会超时,所以这道题需要用树状数组来写,依照别的博客的例子来写,首先我们要先看一维数组的性质,对于l到r的值取反,我们的...

Charles_Zaqdt的博客 326

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 【二维树状数组】

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

weixin_30349597的博客 148

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

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 - 二维树状数组

题目描述给一个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的博客 484

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
上一篇: 最长上升子序列(DP+模板)
下一篇: POJ3494 - Largest Submatrix of All 1’s (单调栈)
ACM_Fish
博客等级 码龄10年 69粉丝 76原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值