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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • jvm jstat_预处理命令是什么意思

    jvm jstat_预处理命令是什么意思作用JVMstatisticsMonitoring,用于监视虚拟机运行时状态信息的命令,它可以显示出虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。使用依旧先看一下使用帮助~ᐅjstat-helpUsage:jstat-help|-optionsjstat-<option>[-t][-h<lines&…

    2022年9月11日
    0
  • phpsotrm 2021.4 激活破解方法

    phpsotrm 2021.4 激活破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    131
  • 线性链表 java实现「建议收藏」

    线性链表 java实现「建议收藏」publicclassLinkList{ classNode{//定义Node节点 privateTdata; privateNodenext; publicNode(){} publicNode(Tdata,Nodenext){ this.data=data; this.next=next; } } privateNodehea

    2025年5月28日
    0
  • c++ STL_鱼c

    c++ STL_鱼c学校并未教授C++,当初接触的C++的STL,也是皮毛而已。结合对Java的集合框架等内容的认识,回顾这部分内容,收获很大。文章目录概述STL六大组件简介三大组件介绍1.容器2.算法3.迭代器常用容器1.string容器string容器基本概念string容器常用操作2.vector容器vector容器基本概念vector迭代器vector的数据结构vector常用API操作…

    2022年10月22日
    0
  • mybatis拦截器详解_Java拦截器

    mybatis拦截器详解_Java拦截器拦截器可在mybatis进行sql底层处理的时候执行额外的逻辑,最常见的就是分页逻辑、对结果集进行处理过滤敏感信息等。}}}}}else{}}}折叠从上面的代码可以看到mybatis支持的拦截类型只有四种(按拦截顺序)1.Executor执行器接口2.StatementHandlersql构建处理器3.ParameterHandler参数处理器4.ResultSetHandler结果集处理器。…

    2022年9月10日
    0
  • 判断一个数是否为素数的代码(判断10000以内的数是不是素数)

    素数(也叫质数)的数学定义为:大于1的自然数中除了1和它本身外没有其他因数的整数,常见的素数有:2,3,5,7,11,13……等,判断一个数是不是素数经常作为考试题目。先了解一下算法:设i=2,n为需要判断的数。 计算n/i 如果n/i的余数为0,则输出:n不是素数 如果n/i的余数不为0,则令i=i+1,如果此时i<n,则返回第2步,否则输出:n是素数。算法流程图:…

    2022年4月18日
    107

发表回复

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

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