题目链接: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));
            }
        }
    }
}

最新文章

  1. 第二章 Rest框架 Nancy
  2. 通过淘宝IP地址库获取IP位置
  3. C#多线程总结
  4. UML精粹1 - 简介
  5. AC自动机 - 多模式串匹配问题的基本运用 + 模板题 --- HDU 2222
  6. Controller之间传递数据:协议传值
  7. 用UltraISO制作的u盘ubuntu11.04,启动失败解决方案
  8. linux中find命令的使用
  9. SGU 145.Strange People(无环K短路)
  10. 【HDOJ】1271 整数对
  11. 左右HttpClient上传的方法来解决中国的乱码
  12. 在ASP.NET MVC自定义错误页面
  13. struts2注解redirect传递参数解决方案时,中国的垃圾问题
  14. ssh用法及命令
  15. VS2017下使用Git遇到的问题
  16. python常见循环练习
  17. javaIO流
  18. unityShader CGINCLUDE关键字
  19. 【刷题】BZOJ 1924 [Sdoi2010]所驼门王的宝藏
  20. SQL Expression Language Tutorial 学习笔记二

热门文章

  1. C++ Templates基本知识
  2. 【BZOJ】【1293】【SCOI2009】生日礼物
  3. Android ADT中增大AVD内存后无法启动:emulator failed to allocate memory 8 (转)
  4. UIResponder类
  5. 编写单例的 dojo class
  6. Mac下使用Apache TCPMon
  7. js弹出图片原图效果
  8. HYSBZ2038 小Z的袜子(莫队算法)
  9. POJ 3450 Corporate Identity (KMP,求公共子串,方法很妙)
  10. jvm性能调优---jstat的用法