• Poj1195&tyvj1474二维线段树


    二维树状数组模板题,熟悉下二维树状数组。

    tyvj1474

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <map>
    #include <set>
    #include <bitset>
    #include <queue>
    #include <stack>
    #include <string>
    #include <iostream>
    #include <cmath>
    #include <climits>
    
    using namespace std;
    const int MAX=1200;
    int c[MAX][MAX];
    int n;
    int LowBit(int t)
    {
        return t&(-t);
    }
    int Sum(int endx,int endy)
    {
        int sum=0;
        int temp=endy;
        while(endx>0)
        {
            endy=temp;
            while (endy>0)
            {
                sum+=c[endx][endy];
                endy-=LowBit(endy);
            }
    
            endx-=LowBit(endx);
        }
        return sum;
    }
    void add(int addx,int addy,int num)
    {
        int temp=addy;
        while (addx <=n)
        {
            addy=temp;
            while(addy<=n)
            {
                c[addx][addy]+=num;
                addy+=LowBit(addy);
            }
            addx+=LowBit(addx);
        }
    }
    int GetSum(int l,int b,int r,int t)
    {
        return Sum(r,t)-Sum(r,b-1)-Sum(l-1,t)+Sum(l-1,b-1);
    }
    
    int main()
    {
        int gg;
        int x;
        int a1,a2,a3,a4;
        scanf("%d",&n);
        while(scanf("%d",&x)!=EOF&&x!=3){
            if(x==1){
                scanf("%d%d%d",&a1,&a2,&a3);
                add(a1+1,a2+1,a3);
            }
            else{
                scanf("%d%d%d%d",&a1,&a2,&a3,&a4);
                cout<<GetSum(a1+1,a2+1,a3+1,a4+1)<<endl;
            }
        }
        return 0;
    }

    poj1195

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <map>
    #include <set>
    #include <bitset>
    #include <queue>
    #include <stack>
    #include <string>
    #include <iostream>
    #include <cmath>
    #include <climits>
    
    using namespace std;
    const int MAX=1200;
    int c[MAX][MAX];
    int n;
    int LowBit(int t)
    {
        return t&(-t);
    }
    int Sum(int endx,int endy)
    {
        int sum=0;
        int temp=endy;
        while(endx>0)
        {
            endy=temp;
            while (endy>0)
            {
                sum+=c[endx][endy];
                endy-=LowBit(endy);
            }
    
            endx-=LowBit(endx);
        }
        return sum;
    }
    void add(int addx,int addy,int num)
    {
        int temp=addy;
        while (addx <=n)
        {
            addy=temp;
            while(addy<=n)
            {
                c[addx][addy]+=num;
                addy+=LowBit(addy);
            }
            addx+=LowBit(addx);
        }
    }
    int GetSum(int l,int b,int r,int t)
    {
        return Sum(r,t)-Sum(r,b-1)-Sum(l-1,t)+Sum(l-1,b-1);
    }
    
    int main()
    {
        int gg;
        int x;
        int a1,a2,a3,a4;
        scanf("%d %d",&gg,&n);
        while(scanf("%d",&x)!=EOF&&x!=3){
            if(x==1){
                scanf("%d%d%d",&a1,&a2,&a3);
                add(a1+1,a2+1,a3);
            }
            else{
                scanf("%d%d%d%d",&a1,&a2,&a3,&a4);
                cout<<GetSum(a1+1,a2+1,a3+1,a4+1)<<endl;
            }
        }
        return 0;
    }
  • 相关阅读:
    多线程和多进程通信原理
    在树莓派4b上安装 ROS MELODIC 源码安装
    使用Android手机作为树莓派的屏幕
    树莓派桌面设置快捷键
    linux 下使用dd制作启动U盘 安装linux
    manjaro 18.10 install soft
    install slax record
    slax中改变终端字体
    为win10下的linux子系统终端添加powerline
    为ubuntu安装powerline记录
  • 原文地址:https://www.cnblogs.com/yigexigua/p/4162649.html
Copyright © 2020-2023  润新知