• hdu 1166 线段树 奇兵布阵


    #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 r,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,r,L,mid,root*2);//两边相加
        if(r>mid) sum+=myquery(l,r,mid+1,R,root*2+1);
        return sum;
    }
    void add(int i,int value,int l,int r,int root){//重点!!  更新的过程
        if(l==r) {tree[root]+=value;return ;}
        int mid=(l+r)>>1;
        if(i<=mid) add(i,value,l,mid,root*2);
        else add(i,value,mid+1,r,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,value,1,n,1);
            }
            if(ss[0]=='S'){
                int i,value;
                scanf("%d %d",&i,&value);
                add(i,-1*value,1,n,1);
            }
            if(ss[0]=='Q'){
                int a ,b;
                scanf("%d%d",&a,&b);
                if(flag){printf("Case %d:
    ",i);flag=0;}
                printf("%d
    ",myquery(a,b,1,n,1));
            }
            if(ss[0]=='E') break;
           }
            i++;
        }
        }

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

  • 相关阅读:
    JUC01
    Linux
    逆向工程核心原理——第三十四章
    逆向工程核心原理——第三十三章
    逆向工程核心原理——第三十二章
    逆向工程核心原理——第三十章
    逆向工程核心原理——第二十八章
    逆向工程核心原理——第二十七章
    逆向工程核心原理——第二十四章
    逆向工程核心原理——第二十三章
  • 原文地址:https://www.cnblogs.com/yzbpxx/p/11069956.html
Copyright © 2020-2023  润新知