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)))

  • 相关阅读:
    使用python写天气预告
    beef配合ettercap批量劫持内网的浏览器
    html布局
    python 使用paramiko模块上传本地文件到ssh
    mysql一些函数的记录
    python与ssh交互
    html笔记4
    html笔记3
    html笔记2
    html笔记1
  • 原文地址:https://www.cnblogs.com/fxq1304/p/13072725.html
Copyright © 2011-2022 走看看