POJ2155:Matrix(二维树状数组,经典)「建议收藏」

POJ2155:Matrix(二维树状数组,经典)

大家好,又见面了,我是全栈君。

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


#include <iostream>#include <stdio.h>#include <string.h>#include <string>#include <stack>#include <queue>#include <map>#include <set>#include <vector>#include <math.h>#include <bitset>#include <list>#include <algorithm>#include <climits>using namespace std;#define lson 2*i#define rson 2*i+1#define LS l,mid,lson#define RS mid+1,r,rson#define UP(i,x,y) for(i=x;i<=y;i++)#define DOWN(i,x,y) for(i=x;i>=y;i--)#define MEM(a,x) memset(a,x,sizeof(a))#define W(a) while(a)#define gcd(a,b) __gcd(a,b)#define LL long long#define N 1005#define INF 0x3f3f3f3f#define EXP 1e-8#define lowbit(x) (x&-x)const int mod = 1e9+7;int c[N][N],n,m,cnt,s,t;int a[N][N];int sum(int x,int y){    int ret = 0;    int i,j;    for(i = x;i>=1;i-=lowbit(i))    {        for(j = y;j>=1;j-=lowbit(j))        {            ret+=c[i][j];        }    }    return ret;}void add(int x,int y){    int i,j;    for(i = x;i<=n;i+=lowbit(i))    {        for(j = y;j<=n;j+=lowbit(j))        {            c[i][j]++;        }    }}int main(){    int i,j,x,y,ans,t;    int x1,x2,y1,y2;    char op[10];    scanf("%d",&t);    while(t--)    {        scanf("%d%d",&n,&m);        MEM(c,0);        MEM(a,0);        while(m--)        {            scanf("%s",op);            if(op[0]=='C')            {                scanf("%d%d%d%d",&x1,&y1,&x2,&y2);                x1++,y1++,x2++,y2++;                add(x2,y2);                add(x1-1,y1-1);                add(x2,y1-1);                add(x1-1,y2);            }            else            {                scanf("%d%d",&x1,&y1);                x2 = x1,y2 = y1;                x1++,y1++,x2++,y2++;                printf("%d\n",sum(x1,y1));            }        }        printf("\n");    }    return 0;}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116489.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java 基础高频面试题(2021年最新版)

    最新Java基础高频面试题

    2022年4月6日
    36
  • Linux关闭防火墙命令访问端口

    Linux关闭防火墙命令访问端口Linux 关闭防火墙命令下面是 redhat CentOs7 关闭防火墙的命令 1 查看防火状态 systemctlsta 暂时关闭防火墙 systemctlsto 永久关闭防火墙 systemctldis

    2025年10月19日
    2
  • 最新视频磨皮降噪神器 轻轻松松完成视频磨皮!Beauty box

    最新视频磨皮降噪神器 轻轻松松完成视频磨皮!Beauty box在视频后期中为了追求更好的视觉效果我们经常需要为画面中人物进行磨皮不过这种技术门槛还是比较高的那么有没有一款插件可以帮助我们让PR\FCP等软件也可以像PS一样轻松实现人像磨皮及小伙伴们所想为小伙伴带来一款全新的插件视频磨皮插件Beautybox(含WIN&MAC版本)支持PR\AECS6-CC2020或更高版本支持FCPX10.1.2或更高版本【插件介绍】▼它是人像润色磨皮滤镜,用于人像图片润色,磨.

    2022年7月22日
    38
  • StretchDIBits函数显示图片

    StretchDIBits函数显示图片注:转载请注明出处。函数原型intStretchDIBits(HDChdc,intXDest,intYDest,intnDestWidth,intnDestHeight,intXSrc,intYsrc,intnSrcWidth,intnSrcHeight,CONSTVOID*lpBits,CONSTBITMAPINFO*lpBitsInfo,UINTiUs…

    2022年6月16日
    27
  • 数据库资料「建议收藏」

    数据库资料「建议收藏」学习数据库的时候发现了比较好的资料,在这里分享一下:https://www.bilibili.com/video/av29219646  视频https://zhangjia.tv/682.html              文档…

    2025年10月29日
    3
  • 开源!!!100 多个常用 API 数据接口免费分享!建议收藏![通俗易懂]

    开源!!!100 多个常用 API 数据接口免费分享!建议收藏![通俗易懂]点击上方“Java精选”,选择“设为星标”别问别人为什么,多问自己凭什么!下方有惊喜留言必回,有问必答!每天08:15更新文章,每天进步一点点…我们在开发的过程中,常常调用API接口,往往事半功倍。今天给大家整理了优秀的API接口!各类无次数限制的免费API接口整理,主要是聚合数据上和APIStore上的一些,还有一些其他的。聚合数据提供30大类,160种以上基…

    2022年9月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号