POJ 1195 Mobile phones (二维树状数组)

news/2024/7/8 2:48:24

题目大意:

对一个矩阵上的某个值进行改动。然后求出子矩阵的和。


思路分析:

这题discuss 上说二维线段树过不了。

所以二维树状数组搞。

理解树状数组的意义就是 1 - n 上全部的和。

然后两重循环。


#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#define maxn 1040
#define lowbit(x) (x&(-x))

using namespace std;
int C[maxn][maxn];
int n;
void add(int x,int y,int a)
{
    for(int i=x;i<=n;i+=lowbit(i))
    {
        for(int j=y;j<=n;j+=lowbit(j))
        {
            C[i][j]+=a;
        }
    }
    //printf("out %d %d\n",x,y);
}

int Sum(int L,int B,int R,int T)
{
    int res=0;
    for(; R>0 ; R -=lowbit(R))
    {
        int p=0,q=0;
        for(int i=T ; i>0 ; i-=lowbit(i))p+=C[R][i];
        for(int i=B-1; i>0 ; i-=lowbit(i))q+=C[R][i];
        res+=p-q;
    }
    int ret=0;
    for(L=L-1; L>0 ;L-=lowbit(L))
    {
        int p=0,q=0;
        for(int i=T; i>0 ;i-=lowbit(i))p+=C[L][i];
        for(int i=B-1; i>0 ;i-=lowbit(i))q+=C[L][i];
        ret+=p-q;
    }
    //printf("%d %d\n",res,ret);
    return res-ret;
}

void debug()
{
    for(int i=1;i<=4;i++)
    {
        for(int j=1;j<=4;j++)
        {
            printf("%d ",C[i][j]);
        }
        puts("");
    }
}

int main()
{
    int op;
    while(scanf("%d",&op)!=EOF)
    {
        if(op==0)
        {
            scanf("%d",&n);
            memset(C,0,sizeof C);
        }
        else if(op==1)
        {
            int x,y;
            int a;
            scanf("%d%d%d",&x,&y,&a);
            x++,y++;
            add(x,y,a);
        }
        else if(op==2)
        {
            int L,B,R,T;
            scanf("%d%d%d%d",&L,&B,&R,&T);
            L++,B++,R++,T++;
            printf("%d\n",Sum(L,B,R,T));
        }
        else break;
        //debug();
    }
    return 0;
}



http://www.niftyadmin.cn/n/3451256.html

相关文章

H323Windows环境编译

原文见http://www.voxgratia.org/docs/openh323_windows.html一、介绍 不管是VC6 还是VS.NET2003,这个文档都提供了编译OPENH323的详细的描述。这些程序是基于PWLIB程序的&#xff0c;在编译OPENH323之前&#xff0c;必须先编译PWLIB二、首要条件 如果你想从源代码编译OPENH323…

Ambari 架构(二)Ambari 整体架构

Ambari 整体架构图&#xff0c;由图中可以看出&#xff0c;主要有4部分&#xff1a; Brower&#xff1a;指的是前端&#xff0c;前端通过 HTTP 发送 Rest 指令和 Ambari Server 进行交互。 Ambari Server&#xff1a;是一个 web 服务器&#xff0c;开放两个端口&#xff0c;分别…

VSS使用技巧

VSS创建数据库方法 解决方法&#xff1a; 1. 新建文件夹 C:/Sstemp. 2. 打开命令运行窗口进入路径VSS/Win32 (具体路径根据安装vss) 3.输入命令&#xff1a;mkss c:/sstemp 4.输入命令&#xff1a;ddconv c:/sstemp 5.输入命令&#xff1a;ddupd c:/sstemp 6.从C:/SStemp中…

程序猿的奋斗史(四十)——大学断代史(四)——我与博客

文/温国兵身处IT行业。博客也好&#xff0c;知识管理工具也罢&#xff0c;明智的IT从业者总有一个良好的习惯&#xff0c;那就是通过博客或者知识管理工具形成自己的知识库。大一的学习过程中&#xff0c;每天都会利用Google检索大量的资料。我发现非常多排在前面的搜索结果都是…

TopCoder简介

基本规则 TopCoder的比赛类型很多&#xff0c;最常见的是周赛SRM&#xff08;Single Round Match&#xff09;&#xff0c;另外还有TCHS SRM&#xff08;TopCoder High School SRM&#xff0c;题目和SRM一样&#xff0c;仅限中学生参加&#xff0c;参赛者水平较低&#xff0c;…

自然的诗歌

在这块叫做数学的黑板上.无数潦草的,工整的字迹,一步一步地将人类和自然拉进.终于,最后一个算式,彻底毁灭了所谓超自然的神,对人类的最后一点控制.那是一个幼稚的字迹,甚至有一种爬虫的感觉.他的未来,可能是一名头戴礼帽,举止优雅的绅士,也可能是一位面朝黄土,为自己的未来耕耘…

RealTek瑞昱ALC声卡设置问题

1 驱动安装失败的问题 如果安装失败:首先卸载掉现有驱动(很重要) 然后重新启动 重启后看看设备管理器中是否有打感动号 或者问号的硬件&#xff0c;即未被正确识别的硬件&#xff08;见下图1处&#xff09; 如果有&#xff0c;点右键卸载掉有问题的硬件&#xff08;如果这…

shell编程函数与数组

shell编程函数与数组1、shell中函数&#xff08;1&#xff09;shell中函数的语法语法一&#xff1a;函数名&#xff08;&#xff09;{指令return n}语法二&#xff1a;function 函数名&#xff08;&#xff09;{指令return n}&#xff08;2&#xff09;shell中函数的调用执行1&…