加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

hdu 1166 线段树 奇兵布阵

发布时间:2020-12-13 17:32:50 所属栏目:PHP教程 来源:网络整理
导读:#includeiostream using namespace std; const int MAX= 50000 ; int tree[(MAX+ 1 )* 4 ]; // n个叶子就有2*n-4*n个节点 int a[MAX+ 1 ]; int n; void getup( int root){ return void (tree[root]=tree[root* 2 ]+tree[root* 2 + 1 ]); // 两个孩子分别是ro
#include<iostream>
using namespace std;
const int MAX=50000;
int tree[(MAX+1)*4];//n个叶子就有2*n-4*n个节点
int a[MAX+1];
int n;
void getup(int root){
    return void(tree[root]=tree[root*2]+tree[root*2+1]);//两个孩子分别是root*2 和root*2+1
}
void btree(int l,int r,int root){//建树
    if(l==r){
        tree[root]=a[l];
        return ;
    }
    int mid=(l+r)>>1;
    btree(l,mid,root*2);
    btree(mid+1,r,root*2+1);//因为向下取整 mid必须加一  不然结束不了
    getup(root);
}
int myquery(int l,int L,int R,int root){//整个的思想是区间和肯定可以用二分的区间表示
    if(l<=L&&r>=R) return tree[root];
    int mid=(L+R)>>1;
    long long sum=0;
    if(l<=mid) sum+=myquery(l,L,root*2);//两边相加
    if(r>mid) sum+=myquery(l,mid+1,R,root*2+1);
    return sum;
}
void add(int i,int value,int l,int root){//重点!!  更新的过程
    if(l==r) {tree[root]+=value;return ;}
    int mid=(l+r)>>1;
    if(i<=mid) add(i,value,l,root*2);
    else add(i,root*2+1);
    getup(root);
}
int main(){
    int t;
    cin>>t;
    int i=1;
    while(i<=t){
        int flag=1;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
        btree(1,n,1);
        char ss[10];
       while(~scanf("%s",ss)){
        if(ss[0]==A){
            int i,value;
            scanf("%d %d",&i,&value);
            add(i,1,1);
        }
        if(ss[0]==S){
            int i,-1*value,1,1);
        }
        if(ss[0]==Q){
            int a,b;
            scanf("%d%d",&a,&b);
            if(flag){printf("Case %d:n",i);flag=0;}
            printf("%dn",myquery(a,b,1));
        }
        if(ss[0]==E) break;
       }
        i++;
    }
    }

题目链接:acm.hdu.edu.cn/status.php?user=YZBPXX&pid=1166&status=5

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读