zoukankan      html  css  js  c++  java
  • BZOJ 3132: 上帝造题的七分钟 树状数组+差分

    这个思路很巧妙啊 ~ 

    code: 

    #include <cstdio> 
    #include <algorithm> 
    #define N 2050
    #define ll int  
    #define setIO(s) freopen(s".in","r",stdin)       
    using namespace std; 
    struct BIT { 
        ll C[N][N]; 
        int lowbit(int t) {
            return t&(-t);      
        }    
        void update(int x,int y,int d) {
            for(int i=x;i<N;i+=lowbit(i)) {
                for(int j=y;j<N;j+=lowbit(j)) {
                    C[i][j]+=d; 
                }
            }
        } 
        ll query(int x,int y) { 
            ll re=0;  
            for(int i=x;i;i-=lowbit(i)) {
                for(int j=y;j;j-=lowbit(j)) {
                    re+=C[i][j]; 
                }
            }
            return re; 
        }
    }A,B,C,D; 
    void Add(int x,int y,int d) {       
        A.update(x,y,d);    
        B.update(x,y,x*d);  
        C.update(x,y,y*d);  
        D.update(x,y,x*y*d);   
    }
    ll qu(int x,int y) {
        ll qa=A.query(x,y)*(x*y+x+y+1);  
        ll qb=-B.query(x,y)*(y+1);  
        ll qc=-C.query(x,y)*(x+1); 
        ll qd=D.query(x,y);   
        return qa+qb+qc+qd;  
    }
    int main() { 
        // setIO("input");    
        char sr[2]; 
        int i,j;     
        int n; 
        int m; 
        scanf("%s",sr); 
        scanf("%d%d",&n,&m);   
        while(scanf("%s",sr)!=EOF) { 
            int a,b,c,d,e; 
            if(sr[0]=='L') {     
                scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);         
                Add(a,b,e); 
                Add(a,d+1,-e); 
                Add(c+1,b,-e); 
                Add(c+1,d+1,e);       
            }
            else { 
                scanf("%d%d%d%d",&a,&b,&c,&d); 
                printf("%d
    ",qu(c,d)-qu(a-1,d)-qu(c,b-1)+qu(a-1,b-1));   
            }
        }
        return 0; 
    }
    

      

  • 相关阅读:
    for ,foreach ,map 循环的区别
    PHP生成验证码图片
    Google自动打印
    MYSQL定时任务
    PHP 多维数组将下标从0开始
    MYSQL常用函数
    PHP 手机短信发送验证码
    php 限制标题长度,将一个中文转换成一个字符
    MYSQL 模糊查询
    MYSQL AND 和 OR
  • 原文地址:https://www.cnblogs.com/guangheli/p/12070093.html
Copyright © 2011-2022 走看看