敌兵布阵 树状数组

来源:互联网 发布:2017勇士vs骑士g4数据 编辑:程序博客网 时间:2024/06/06 03:20

这是个区间求和的代码


#include<iostream>#include<stdio.h>#include<string.h>#include<stdlib.h>using namespace std;int N;int a[50010],b[50010];int lowbit(int k){return k&(-k);}void add(int k,int num){while(k<=N){a[k]+=num;k+=lowbit(k);}}void sub(int k,int num){while(k<=N){a[k]-=num;k+=lowbit(k);}}int read(int k) //求从1到K的和 {int sum=0;while(k>0){sum+=a[k];k-=lowbit(k); }   return sum;}int main(){int T,i,j,re=1;cin>>T;char ch[6];while(T--){printf("Case %d:\n",re++);memset(a,0,sizeof(a));cin>>N;for(i=1;i<=N;i++){int temp;cin>>temp;add(i,temp);}while(cin>>ch){if(strcmp(ch,"End")==0) break;if(strcmp(ch,"Add")==0){int a,b;scanf("%d %d",&a,&b);add(a,b);}else if(strcmp(ch,"Sub")==0){int a,b;scanf("%d %d",&a,&b);sub(a,b);}else{int a,b;scanf("%d %d",&a,&b);cout<<read(b)-read(a-1)<<endl;}}} } 

下面这个是求区间最值的代码,不对不对,树状数组似乎不适合求区间最值。



0 0
原创粉丝点击