• poj_1195Mobile phones,二维树状数组


    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int a[1300][1300];
    int s;
    int lowbit(int x)
    {
        return x&(-x);
    }
    void add(int x,int y,int d)
    {
       for(int i=x;i<=s;i+=lowbit(i))
        for(int j=y;j<=s;j+=lowbit(j))
        a[i][j]+=d;
    }
    int sum(int x,int y)
    {
        int ret=0;
        for(int i=x;i>0;i-=lowbit(i))
            for(int j=y;j>0;j-=lowbit(j))
            ret+=a[i][j];
        return ret;
    }
    int main()
    {
        while(scanf("%d%d",&s,&s)!=EOF)
        {
            memset(a,0,sizeof(a));
            int n,x,y,d,xt,yt;
            while(scanf("%d",&n))
            {
                if(n==3) break;
                if(n==1)
                {
                    scanf("%d%d%d",&x,&y,&d);
                    x++,y++;
                    add(x,y,d);
                }
                if(n==2)
                {
                    scanf("%d%d%d%d",&x,&y,&xt,&yt);
                    x++,y++,xt++,yt++;
                    int ans=sum(xt,yt)-sum(xt,y-1)-sum(x-1,yt)+sum(x-1,y-1);
                    cout<<ans<<endl;
                }
            }
        }
        return 0;
    }
    

  • 相关阅读:
    poj1087最大流拆点
    3月15上午的函数练习
    3月15
    3月13上午
    3月13
    3月12
    break语句
    3月11
    3月10号
    3月9号
  • 原文地址:https://www.cnblogs.com/vactor/p/4099988.html
Copyright © 2020-2023  润新知