树状数组test

这是按照自己理解写的一个测试代码。。。

简单易懂

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
const int maxn = 10005;
int a[ maxn ],c[ maxn ];
int lowbit( int i ){
	return i&(-i);
}
int sum( int i ){
	int s=0;
	while( i>0 ){
		s+=c[ i ];
		i-=lowbit( i );
	}
	return s;
}
void update( int i,int new_val,int pre_val ){
	while( i<maxn ){
		c[ i ]-=pre_val;
		c[ i ]+=new_val;
		i+=lowbit( i );
	}
}
void test( int n ){
	printf("\n\n");
	for( int i=1;i<=n;i++ )
		printf("%d ",a[ i ]);
	printf("\n\n");
}
int main(){
	int n;
	while( scanf("%d",&n)==1 ){
		memset( a,0,sizeof( a ) );
		memset( c,0,sizeof( c ) );
		for( int i=1;i<=n;i++ ){
			scanf("%d",&a[ i ]);
			update( i,a[ i ],0 );
		}
		int m;
		scanf("%d",&m);
		while( m-- ){
			int op;
			scanf("%d",&op);
			if( op==1 ){
				int pos,new_val;
				scanf("%d%d",&pos,&new_val);
				test( n );
				update( pos,new_val,a[ pos ] );
				a[ pos ]=new_val;
				test( n );//输出1 到 n 
			}//change a[ pos ] to new_val
			else if( op==2 ){
				int from,to;
				scanf("%d%d",&from,&to);
				if( from>1 )
					printf("from %d to %d:%d\n",from,to,sum( to )-sum( from-1 ) );
				else
					printf("from %d to %d:%d\n",from,to,sum( to ) );
			}//询问从from到to的总和
		}
	}
	return 0;
}
		

 

转载于:https://www.cnblogs.com/xxx0624/archive/2013/03/19/2968662.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值