zoukankan      html  css  js  c++  java
  • 模板

    模板一:单点修改,区间求和

    #define lowbit(x) x&(-x)
    const int maxn=100010;
    int n,bit[2*maxn];
    
    int query(int x){
    	int s=0;
    	while(x>0){
    		s+=bit[x];
    		x-=lowbit(x);
    	}
    	return s;
    }
    
    void change(int x,int v){
    	while(x<=n){
    		bit[x]+=v;
    		x+=lowbit(x);
    	}
    }
    

    模板二:区间修改,单点查询
        将原数组存储成差分数组,根据差分的性质,在区间[l,r]上同时加上x可以处理成:
        (change(l,x))
        (change(r+1,-x))
        查询下标为i的元素值可以处理成:
        (query(i))
    模板三:区间修改,区间求和
        设置两个BIT,bit0和bit1
        (sum_{j=1}^{i}a_j=query(bit1,i) imes i+query(bit0,i))
        在区间[l,r]上同时加上x可以处理成:
        (change(bit0,l,-x*(l-1)))
        (change(bit1,l,x))
        (change(bit0,r+1,x*r))
        (change(bit1,r+1,-x))
        区间[l,r]的求和可以处理成:
        (query(bit1,r)*r+query(bit0,r)-(query(bit1,l-1)*(l-1)+query(bit0,l-1)))

  • 相关阅读:
    Eclipse配置方法注释模板
    彻底清除Github上某个文件以及历史
    eclipse快捷键
    Hibernate执行原生SQL
    API接口规范
    eclipse配置google代码风格
    eclipse format xml
    git撤销commit
    使用postman测试文件上传
    centos7下部署elasticSearch集群
  • 原文地址:https://www.cnblogs.com/fxq1304/p/13072725.html
Copyright © 2011-2022 走看看