题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1452

题意:给出一个数字矩阵(矩阵中任何时候的数字均为[1,100]),两种操作:(1)修改某个位置的数字;(2)求某个子矩阵中某个数字的个数。

思路:二维树状数组的操作看起来跟一维的差不多,只是循环改为两重而已。主要操作有:(1)增加某个位置的值;(2)询问[1,1,x,y]子矩阵的和。利用(2)操作以及区间的减法操作我们能求出任意一个子矩阵的数字和。这道题用a[i][x][y]来记录关于数字i的信息。

int a[105][N][N];

void add(int a[N][N],int x,int y,int t)
{
    int i,j;
    for(i=x;i<N;i+=i&-i) for(j=y;j<N;j+=j&-j)
    {
        a[i][j]+=t;
    }
}

int query(int a[N][N],int x,int y)
{
    int ans=0,i,j;
    for(i=x;i;i-=i&-i) for(j=y;j;j-=j&-j)
    {
        ans+=a[i][j];
    }
    return ans;
}

int query(int a[N][N],int x1,int y1,int x2,int y2)
{
    return query(a,x2,y2)-query(a,x1-1,y2)-query(a,x2,y1-1)+query(a,x1-1,y1-1);
}

int n,m;
int b[N][N];

int main()
{
    Rush(n)
    {
        RD(m); clr(a,0);
        int i,j,x;
        FOR1(i,n) FOR1(j,m)
        {
            RD(x);
            add(a[x],i,j,1);
            b[i][j]=x;
        }
        int Q;
        RD(Q);
        int op,x1,x2,y1,y2,c;
        while(Q--)
        {
            RD(op);
            if(op==1)
            {
                RD(x1,y1,c);
                add(a[b[x1][y1]],x1,y1,-1);
                b[x1][y1]=c;
                add(a[c],x1,y1,1);
            }
            else
            {
                RD(x1,x2); RD(y1,y2); RD(c);
                PR(query(a[c],x1,y1,x2,y2));
            }
        }
    }
}

BZOJ 1452 Count(二维树状数组)的更多相关文章

  1. BZOJ 1452 Count(二维树状数组)

    大水题. 建立100个二维树状数组,总复杂度就是O(qlognlogm). # include <cstdio> # include <cstring> # include & ...

  2. bzoj 1452: [JSOI2009]Count ——二维树状数组

    escription Input Output Sample Input Sample Output 1 2 HINT ———————————————————————————————————————— ...

  3. bzoj1452 [JSOI2009]Count ——二维树状数组

    中文题面,给你一个矩阵,每一个格子有数字,有两种操作. 1. 把i行j列的值更改 2. 询问两个角坐标分别为(x1,y1) (x2,y2)的矩形内有几个值为z的点. 这一题的特点就是给出的z的数据范围 ...

  4. 【bzoj1452】[JSOI2009]Count 二维树状数组

    题目描述 输入 输出 样例输入 样例输出 1 2 题解 二维树状数组 一开始没看到 1≤c≤100 ,想到了主X树和X块,结果发现c的范围那么小... 二维树状数组水题,和一维的一样,向上修改,向下查 ...

  5. BZOJ 1452: [JSOI2009]Count 二维树状数组

    1452: [JSOI2009]Count Description Input Output Sample Input Sample Output 1 2 HINT Source 题解:设定C[101 ...

  6. Count(二维树状数组)

    [bzoj1452][JSOI2009]Count Description Input Output Sample Input Sample Output 12   HINT 题解:对于每一个颜色建一 ...

  7. 二维树状数组 BZOJ 1452 [JSOI2009]Count

    题目链接 裸二维树状数组 #include <bits/stdc++.h> const int N = 305; struct BIT_2D { int c[105][N][N], n, ...

  8. bzoj 1452: [JSOI2009]Count (二维树状数组)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1452 思路: 对每个颜色开一个二维树状数组维护就好了 实现代码: #include<b ...

  9. BZOJ 1452 Count 【模板】二维树状数组

    对每种颜色开一个二维树状数组 #include<cstdio> #include<algorithm> using namespace std; ; ][maxn][maxn] ...

随机推荐

  1. C++ Template之技巧性基础知识

    1.对于T是自定义类型的,如果存在子类型则需要在模版内部加上typename 示例代码: template<typename T> class Myclass { typename T:: ...

  2. 初用Spring Test

    粗糙的研究了下Spring test,分享以下blog: 1. http://blog.csdn.net/shan9liang/article/details/40452469 2. http://w ...

  3. Sencha Touch xtype对应的class

    Sencha Touch 2的有效xtype xtype Class ----------------- --------------------- actionsheet Ext.ActionShe ...

  4. mysql SQLyog导入导出csv文件

    1.选择数据库表 --> 右击属性 --> 备份/导出 --> 导出表数据作为 --> 选择cvs --> 选择下面的“更改” --> 字段 --> 变量长度 ...

  5. swfObject 使用说明

    1.Embed your SWF with JavaScript 使用方法  swfobject.embedSWF(swfUrl, id, width, height, version, expres ...

  6. Unix环境链接静态库

    静态库 请点评 有时候需要把一组代码编译成一个库,这个库在很多项目中都要用到,例如libc就是这样一个库,我们在不同的程序中都会用到libc中的库函数(例如printf),也会用到libc中的变量(例 ...

  7. 由浅入深了解Thrift之结果封装

    一.thrift返回结果封装 Thrift文件添加版本号,方便对thrift的版本进行控制 服务与返回的数据类型分开定义 在项目中使用Thrift提供RPC服务时,很多情况下我们都会将返回的结果进行封 ...

  8. 很不错的文章---【问底】徐汉彬:亿级Web系统搭建——单机到分布式集群

    [导读]徐汉彬曾在阿里巴巴和腾讯从事4年多的技术研发工作,负责过日请求量过亿的Web系统升级与重构,目前在小满科技创业,从事SaaS服务技术建设. 大规模流量的网站架构,从来都是慢慢“成长”而来.而这 ...

  9. 机器学习之多变量线性回归(Linear Regression with multiple variables)

    1. Multiple features(多维特征) 在机器学习之单变量线性回归(Linear Regression with One Variable)我们提到过的线性回归中,我们只有一个单一特征量 ...

  10. QTP10补丁汇总

    QTP10补丁汇总 QTP_00591.EXE QTP10 调试器视图问题的补丁 QTP_00591 - Prevent QuickTest Debug Viewer Problems when Pr ...