程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> HDU 1166 敵兵布陣

HDU 1166 敵兵布陣

編輯:C++入門知識

分析:線段樹模板、學的時候畫圖分析、盡量不要看別人的模板、自己去分析、懂了原理然後自己把它寫出來相當有成就感、其實也就是創建、更新和查詢操作而已、說難也不難、

 
#include<stdio.h>  
#define N 50005  
struct node{  
    int l,r;  
    int sum;  
}tree[N<<2];  
int a[N];  
int ans,n;  
void create(int x,int l,int r){  
    tree[x].l=l;  
    tree[x].r=r;  
    if(l==r){  
        tree[x].sum=a[l];  
        return;  
    }  
    int mid=(l+r)/2;  
    create(x*2,l,mid);  
    create(x*2+1,mid+1,r);  
    tree[x].sum=tree[x*2].sum+tree[x*2+1].sum;  
}  
void update(int x,int p,int num){  
    int l=tree[x].l;  
    int r=tree[x].r;  
    int mid=(l+r)/2;  
    if(l==r){  
        tree[x].sum+=num;  
        return;  
    }  
    if(p<=mid)  
        update(x*2,p,num);  
    else  
        update(x*2+1,p,num);  
    tree[x].sum=tree[x*2].sum+tree[x*2+1].sum;  
}  
void query(int x,int l,int r){  
    if(tree[x].l==l&&tree[x].r==r){  
        ans+=tree[x].sum;  
        return;  
    }  
    int mid=(tree[x].l+tree[x].r)/2;  
    if(r<=mid)  
        query(x*2,l,r);  
    else if(l>mid)  
        query(x*2+1,l,r);  
    else{  
        query(x*2,l,mid);  
        query(x*2+1,mid+1,r);  
    }  
}  
int main(){  
    int t,x,y,k=1;  
    char str[10];  
    scanf("%d",&t);  
    while(t--){  
        printf("Case %d:\n",k);k++;  
        scanf("%d",&n);  
        for(int i=1;i<=n;i++)  
            scanf("%d",&a[i]);  
        create(1,1,n);  
        while(scanf("%s",str)){  
            if(str[0]=='E')break;  
            if(str[0]=='A'){  
                scanf("%d%d",&x,&y);  
                update(1,x,y);  
            }  
            if(str[0]=='S'){  
                scanf("%d%d",&x,&y);  
                update(1,x,-y);  
            }  
            if(str[0]=='Q'){  
                ans=0;  
                scanf("%d%d",&x,&y);  
                query(1,x,y);  
                printf("%d\n",ans);  
            }  
        }  
    }  
    return 0;  
}  

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved