zoukankan      html  css  js  c++  java
  • POJ2155 Matrix(树状数组)

    根据武森的国家集训队论文我们知道,只需要在四个点插入值即可,之后用二维数组求和,因为矩阵上都是0和1,并且初始为0,我们只需计算他更改次数的奇偶次

    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    #include<cmath>
    #include<vector>
    #include<string>
    #include<cstring>
    #include<map>
    #include<set>
    using namespace std;
    typedef long long ll;
    const int N=1e5+10;
    int tr[1100][1100];
    int n;
    int lowbit(int x){
        return x&-x;
    }
    void add(int x,int y,int c){
        int i,j;
        for(i=x;i<=n;i+=lowbit(i)){
            for(j=y;j<=n;j+=lowbit(j))
            tr[i][j]+=c;
        }
    }
    int sum(int x,int y){
        int i,j;
        int res=0;
        for(i=x;i;i-=lowbit(i)){
            for(j=y;j;j-=lowbit(j)){
                res+=tr[i][j];
            }
        }
        return res;
    }
    int main(){
        int q;
        int m;
        cin>>q;
        while(q--){
            cin>>n>>m;
            int i;
            memset(tr,0,sizeof tr);
            while(m--){
                char s[N];
                scanf("%s",s);
                if(*s=='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(x2+1,y2+1,1);
                add(x1,y2+1,1);
                }
                else{
                    int x,y;
                    scanf("%d%d",&x,&y);
                    if(sum(x,y)%2==0)
                    printf("0
    ");
                    else 
                    printf("1
    ");
                }
                
            }printf("
    "); 
        }
    } 
    View Code
  • 相关阅读:
    动网16位gb2312md5加密
    开发windows7侧边栏小工具
    MVC文档地址
    关闭FCNs(文件修改监控)
    内存管理
    android笔记一(Button)
    android笔记五ImageButton
    android笔记三FrameLayout
    linux内核各组件的功能介绍
    C++面试题
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/12320446.html
Copyright © 2011-2022 走看看