POJ 2155 Matrix(二维树状数组)

原创 2013年12月03日 20:58:39

题目链接:http://poj.org/problem?id=2155

这个题目和上面一题一样,不过这个还简单点

先理解一维的再来理解二维的就好多了

看算法合集之《浅谈信息学竞赛中的“0”和“1”》上面讲的比较清楚

#include <string.h>
#include <algorithm>
#include <iostream>
#include <stdio.h>
using namespace std;
const int maxn = 1005;
int tree[maxn][maxn];
int n,m;
char str[10];
int lowbit(int x){
    return (-x)&x;
}
int sum(int i,int j){
    int ans=0,now;
    while(i>0){
        now=j;
        while(now>0){
            ans+=tree[i][now];
            now-=lowbit(now);
        }
        i-=lowbit(i);
    }
    return ans;
}
int update(int i,int j){
    int now;
    while(i<=n){
        now=j;
        while(now<=n){
            tree[i][now]++;
            now+=lowbit(now);
        }
        i+=lowbit(i);
    }
    return 0;
}
int main(){
    int i,j,k,t,x1,y1,x2,y2,x11,y11,x22,y22;
    scanf("%d",&t);
    while(t--){
        memset(tree,0,sizeof(tree));
        scanf("%d%d",&n,&m);
        for(i=0;i<m;i++){
            scanf("%s",str);
            if(str[0]=='C'){
                scanf("%d%d%d%d",&x11,&y11,&x22,&y22);
                x1=min(x11,x22);
                x2=max(x11,x22);
                y1=min(y11,y22);
                y2=max(y11,y22);
                update(x1,y1);
                update(x1,y2+1);
                update(x2+1,y1);
                update(x2+1,y2+1);
            }else{
                scanf("%d%d",&x1,&y1);
                printf("%d\n",sum(x1,y1)%2);
            }
        }
        printf("\n");
    }
    return 0;
}


POJ 2155 Matrix(二维树状数组,绝对详细)

Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 20599   Accept...
  • acm_BaiHuzi
  • acm_BaiHuzi
  • 2015年07月09日 16:49
  • 2715

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

Description Given an N*N matrix A, whose elements are either 0 or 1. A[i, j] means the number in ...
  • libin56842
  • libin56842
  • 2015年06月24日 12:17
  • 2616

POJ Matrix ( 二维树状数组)

题目大意:给你一个N * N的矩阵A,有Q次操作; 1. C x1 y1 x2 y2 ,将(x1 , y1) (x2 , y2)包含的子矩阵的数值翻转,即0变1 , 1 变0 2. Q x ...
  • u013961718
  • u013961718
  • 2015年09月01日 21:44
  • 418

Matrix.(POJ-2155)(树状数组)

一道二维树状数组的题目,比较经典,适合新手练习。 可以打印出来每次操作后矩阵的情况,就能很直观的理解这个树状数组是怎么实现的,他将多余的部分巧妙的重复了偶数次,使得多余部分奇偶不会发生变化。 #inc...
  • weizhuwyzc000
  • weizhuwyzc000
  • 2015年05月02日 22:09
  • 990

POJ 2155 Matrix 二维树状数组

题目来源:POJ 2155 Matrix 题意:开始矩阵都是0 2种操作 把某个子矩阵翻转 0变1 1变0 查询x y 是0还是1 思路:树状数组 记录翻转次数就行 奇数次是1 偶数次是0  这题是区...
  • u011686226
  • u011686226
  • 2014年05月26日 18:00
  • 889

POJ 2155 Matrix (二维树状数组)

题意: 给你一个N*N的矩阵,一开始每个元素都是0,给你q 个操作,每个操作,可以把(x1,y1)到(x2,y2)的矩形里元素取反(0变1,1变0)。 可以查询每个元素的值。 思路: 二维树状数...
  • aozil_yang
  • aozil_yang
  • 2017年03月14日 20:44
  • 103

Matrix - POJ 2155 二维树状数组

Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 17150   Accept...
  • u014733623
  • u014733623
  • 2014年05月14日 14:22
  • 435

POJ 2155:Matrix 二维树状数组

Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 21757   Accept...
  • u010885899
  • u010885899
  • 2015年10月09日 11:59
  • 264

二维树状数组 —— POJ 2155 Matrix

二维树状数组 —— POJ 2155 Matrix
  • u013351484
  • u013351484
  • 2016年03月08日 15:36
  • 223

POJ 2155 Matrix(二维树状数组)

http://poj.org/problem?id=2155
  • secfly
  • secfly
  • 2016年03月14日 22:08
  • 162
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:POJ 2155 Matrix(二维树状数组)
举报原因:
原因补充:

(最多只允许输入30个字)