zoukankan      html  css  js  c++  java
  • 【VIJOS】P1512 SuperBrother打鼹鼠

    【算法】二维树状数组

    【题解】

    1.树状数组尽量不要出现0,因此所有坐标+1

    2.面积求法(默认1开始):(x1,y1)(x2,y2)=sum(x2,y2)-sum(x1-1,y2)-sum(x2,y1-1)+sum(x1-1,y1-1)[sum表示(1,1)(x,y)]

    原来这个也算树套树……树状数组套树状数组>w<!

    #include<cstdio>
    #define lowbit(x) x&(-x)
    const int maxn=1100;
    int a[maxn][maxn],n,m,x,y,k,x1,y1;
    void give(int x,int y,int k)
    {
        for(int i=x;i<=n;i+=lowbit(i))
         for(int j=y;j<=n;j+=lowbit(j))
          a[i][j]+=k;
    }
    int ask(int x,int y)
    {
        int ans=0;
        for(int i=x;i>0;i-=lowbit(i))
         for(int j=y;j>0;j-=lowbit(j))
          ans+=a[i][j];
        return ans;
    }
    int main()
    {
        scanf("%d",&n);scanf("%d",&m);
        while(m!=3)
         {
             if(m==1)
              {
                  scanf("%d%d%d",&x,&y,&k);
                  give(x+1,y+1,k);
              }
             if(m==2)
              {
                  scanf("%d%d%d%d",&x,&y,&x1,&y1);
                  printf("%d
    ",ask(x1+1,y1+1)-ask(x1+1,y)-ask(x,y1+1)+ask(x,y));
              }
             scanf("%d",&m);
         }
        return 0;
    }
    View Code
  • 相关阅读:
    CSS介绍
    docker入门
    nginx+uWSGI+django+virtualenv+supervisor发布web服务器
    niginx入门
    常用服务安装部署
    VIM
    linux基本命令
    linux目录分级
    OpenStack共享组件
    kvm认识和安装
  • 原文地址:https://www.cnblogs.com/onioncyc/p/5757142.html
Copyright © 2011-2022 走看看