zoukankan      html  css  js  c++  java
  • 参考:树状数组【1 / 2】代码

     本文尚未完成(很抱歉..)


    树状数组1: 

    #include<cstdio>
    #include<iostream>
    using namespace std;
    int n,c[500010];
    int lowbit(int x){
    	return x&-x;
    }
    void add(int x,int k){
    	for(;x<=n;x+=lowbit(x))c[x]+=k;
    }
    int sum(int x,int y){
    	int ans=0;
    	for(;y;y-=lowbit(y)){
    		ans+=c[y];
    	}
    	for(x--;x;x-=lowbit(x)){
    		ans-=c[x];
    	}
    	return ans;
    }
    int main(){
    	int m;
    	scanf("%d%d",&n,&m);
    	for(int i=1;i<=n;i++){
    		int k;
    		scanf("%d",&k);
    		add(i,k);
    	}
    	for(int i=1;i<=m;i++){
    		int ta,x,y;
    		scanf("%d%d%d",&ta,&x,&y);
    		if(ta==1){
    			add(x,y);
    		}else if(ta==2){
    			cout<<sum(x,y)<<endl;
    		}
    	}
    	return 0;
    }

    树状数组2:

    #include<cstdio>
    #include<iostream>
    #define lowbit(x) x&-x
    using namespace std;
    long long c[500005];
    int n,m;
    void add(int x,int num){
    	for(;x<=n;x+=lowbit(x))c[x]+=num;
    }
    long long query(int x){
    	long long ans=0;
    	for(;x;x-=lowbit(x))ans+=c[x];
    	return ans;
    }
    int main(){
    	scanf("%d%d",&n,&m);
    	long long last=0,now;
    	for(int i=1;i<=n;i++){
    		scanf("%lld",&now);
    		add(i,now-last);
    		last=now;
    	}
    	for(int i=1;i<=m;i++){
    		int flg;
    		scanf("%d",&flg);
    		if(flg==1){
    			int x,y,k;
    			scanf("%d%d%d",&x,&y,&k);
    			add(x,k);
    			add(y+1,-k);
    		}else if(flg==2){
    			int x;
    			scanf("%d",&x);
    			printf("%lld
    ",query(x));
    		}
    	}
    	return 0;
    }
  • 相关阅读:
    关于CoreData的使用
    【转】向iOS开发者介绍C++(-)
    Storyboard里面的几种Segue区别及视图的切换:push,modal,popover,replace和custom
    【转】Object-C 多线程中锁的使用-NSLock
    写了半天的返回
    oracle 锁表问题
    LINQ的基本认识
    Oracle客户端配置
    REVERSE
    vchar2和nvchar2
  • 原文地址:https://www.cnblogs.com/zbsy-wwx/p/11680696.html
Copyright © 2011-2022 走看看