zoukankan      html  css  js  c++  java
  • poj-1195(二维树状数组)

    题目链接:传送门

    题意:给出操作,按照操作进行。

    思路:将树状数组设置为二维的就行了。

    注意:

    (1)每次求出的面积是S(x2,y2)-S(x1-1,y2)-S(x2,y1-1)+S(x1-1,y1-1)。

    (2)树状数组的lowbit不允许0。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    const int maxn = 2050;
    int c[maxn][maxn],lowbit[maxn],N;
    void update(int x,int y,int Item)
    {
        for(int i=x;i<=N;i+=lowbit[i])
            for(int j=y;j<=N;j+=lowbit[j])
            c[i][j]+=Item;
    }
    int query(int x,int y)
    {
        int sum=0;
        for(int i=x;i>0;i-=lowbit[i])
            for(int j=y;j>0;j-=lowbit[j])
            sum+=c[i][j];
        return sum;
    }
    int get_ans(int x,int y,int A,int B)
    {
        return query(A+1,B+1)+query(x,y)-query(x,B+1)-query(A+1,y);
    }
    int main(void)
    {
        int i,j,x,y,A,B,pos;
        for(i=1;i<maxn;i++) lowbit[i]=i&(-i);
        while(1)
        {
            scanf("%d",&pos);
            if(pos==1)
            {
                scanf("%d%d%d",&x,&y,&A);
                update(x+1,y+1,A);
            }
            else if(pos==2)
            {
                scanf("%d%d%d%d",&x,&y,&A,&B);
                int ans=get_ans(x,y,A,B);
                printf("%d
    ",ans);
            }
            else if(pos==0)
            {
                scanf("%d",&N);
                memset(c,0,sizeof(c));
            }
            else break;
        }
        return 0;
    }
    View Code
  • 相关阅读:
    singleTon 模式
    最近的工作经验
    sql server里的快捷键
    Bridge 模式
    [转]在.NET客户端程序中使用多线程
    wse
    关于高频查询界面
    判断字段值已经存在
    获取当前供应商的联系人信息
    获取系统常量
  • 原文地址:https://www.cnblogs.com/2018zxy/p/10187695.html
Copyright © 2011-2022 走看看