• POJ1195 Mobile phones


    题目大意

    给定一个N*N的网格,刚开始每个网格的值都是0,接下来会对这些网格进行操作,有一下两种操作:

    1、”X Y A“对网格C[x][y]增加A

    2、”L B R T“ 查询所有(L<=X<=R,B<=Y<=T)的网格C[X[Y],并返回它们的总和

    题解

    非常经典的二维树状数组题目,直接看代码吧

    代码

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #define MAXN 1050
    using namespace std;
    int c[MAXN][MAXN];
    int n;
    int lowbit(int x)
    {
        return x&-x;
    }
    int sum(int x,int y)
    {
        int i,j,ret=0;
       for(i=x;i>0;i-=lowbit(i))
       for(j=y;j>0;j-=lowbit(j))
       ret+=c[i][j];
       return ret;
    }
    void add(int x,int y,int d)
    {
        int i,j;
            for(i=x;i<=n;i+=lowbit(i))
            for(j=y;j<=n;j+=lowbit(j))
            c[i][j]+=d;
    }
    int main(void)
    {
        int a,j,lb,x1,y1,x2,y2,ans;
        while(cin>>a>>n)
        {
            memset(c,0,sizeof(c));
            while(scanf("%d",&lb)==1&&lb!=3)
            {
                if(lb==2)
                {
                      ans=0;
                      scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
                      x1++; y1++;
                      x2++; y2++;
                    ans+=sum(x2,y2);
                    ans-=sum(x1-1,y2);
                    ans-=sum(x2,y1-1);
                    ans+=sum(x1-1,y1-1);
                    printf("%d\n",ans);
                }
                else
                {
                    scanf("%d%d%d",&x1,&y1,&j);
                    x1++;
                    y1++;
                    add(x1,y1,j);
                }
            }
        }
        return 0;
    }
  • 相关阅读:
    rotatelogs分割apache日志文件
    Linux怎么设置PostgreSQL远程访问
    【转】Shell编程
    【转】lnmp_auto:自动化安装lnmp环境脚本
    postgres配置主从流复制
    PHP中的魔术方法总结
    postgresql 忘记 postgres 密码
    linux下解压命令大全
    Java NIO Selector
    Channel (Java NIO)
  • 原文地址:https://www.cnblogs.com/zjbztianya/p/3031671.html
Copyright © 2020-2023  润新知