zoukankan      html  css  js  c++  java
  • C

    思想和上一题一模一样,不过是二维树状数组+差分数组

    注意二维区间修改的表示:

    add( x1 ,y1 ,1);
    add( x2+1 ,y2+1 ,1);
    add( x1 ,y2+1 ,-1);
    add( x2+1 ,y1 ,-1);

    #include <cstdio>
    #include <cstring>
    
    using namespace std;
    int n;
    int t[1005][1005];
    
    int lowbit( int x){
         return x & ( -x);
    }
    
    void add( int x, int y ,int v){
         while( x<=n){
             int i=y;
             while( i<=n ){
                t[x][i] += v;
                i += lowbit( i);
             }
             x += lowbit(x);
         }
    }
    
    int sum( int x, int y){
         int s=0;
         while( x > 0 ){
             int i=y;
             while( i > 0 ){
                s +=t[x][i];
                i  -= lowbit( i);
             }
             x -= lowbit(x);
         }
         return s;
    }
    
    
    int main( ){
         int T;
         scanf("%d" ,&T);
         while( T--){
             memset( t ,0 ,sizeof(t));
             int q;
             char op[10];
             int x1, x2 ,y1 ,y2;
             scanf("%d%d" ,&n ,&q);
             while( q--){
                 scanf( "%s" ,op);
                 if( op[0] == 'C'){
                    scanf("%d%d%d%d",&x1 ,&y1 ,&x2 ,&y2);
                    add( x1 ,y1 ,1);
                    add( x2+1 ,y2+1 ,1);
                    add( x1 ,y2+1 ,-1);
                    add( x2+1 ,y1 ,-1);
                 }
                else{
                    scanf("%d%d" ,&x1 ,&y1);
                    printf("%d
    ",sum( x1 ,y1)%2);
                }
             }
             printf("
    ");
         }
         return 0;
    }
  • 相关阅读:
    CMDB表结构设计
    mysql数据库密码
    web之提取状态码
    ELK的启动脚本
    ELK的轻量级搭建使用
    liunx安装JDK
    liunx的urandom生成随机字符
    vim快捷键
    升级系统的python程序
    Mysql的进阶小记
  • 原文地址:https://www.cnblogs.com/-ifrush/p/10690255.html
Copyright © 2011-2022 走看看