首页 > 其他 > 详细

HDU1166 敌兵布阵(线段树模板)

时间:2020-03-16 23:14:27      阅读:80      评论:0      收藏:0      [点我收藏+]

模板题:

技术分享图片
#include<iostream>
#include<queue>
#include<map>
#include<vector>
#include<cstdio>
#include<algorithm>
#include<stack>
#include<string>
#include<cstring>
using namespace std;
typedef long long ll;
const int N=1e5+10;
const int inf=0x3f3f3f3f;
struct node{
    int l,r;
    int cnt;
}tr[N*4];
int a[N];
void pushup(int u){
    tr[u].cnt=tr[u<<1].cnt+tr[u<<1|1].cnt;
}
void build(int u,int l,int r){
    if(l==r){
        tr[u]=node{l,l,a[l]};
    }
    else{
        int mid=l+r>>1;
        tr[u]=node{l,r};
        build(u<<1,l,mid);
        build(u<<1|1,mid+1,r);
        pushup(u);
    }
}
void modify(int u,int x,int y){
    if(tr[u].l==tr[u].r){
        tr[u].cnt+=y;
        return ;
    }
    int mid=tr[u].l+tr[u].r>>1;
    if(x<=mid)
        modify(u<<1,x,y);
    else
        modify(u<<1|1,x,y);
    pushup(u);
}
int query(int u,int l,int r){
    if(tr[u].l>=l&&tr[u].r<=r){
        return tr[u].cnt;
    }
    int mid=tr[u].l+tr[u].r>>1;
    int res=0;
    if(l<=mid)
        res=query(u<<1,l,r);
    if(r>mid)
        res+=query(u<<1|1,l,r);
    return res;
}
int main(){
    int n,m;
    int t;
    cin>>t;
    int cnt=1;
    while(t--){
        cin>>n;
        int i;
        for(i=1;i<=n;i++){
            scanf("%d",&a[i]);
        }
        build(1,1,n);
        string s;
        printf("Case %d:\n",cnt++);
        while(cin>>s){
            if(s=="End")
                break;
            if(s=="Add"){
                int x;
                int y;
                scanf("%d%d",&x,&y);
                modify(1,x,y);
            }
            else if(s=="Sub"){
                int x;
                int y;
                scanf("%d%d",&x,&y);
                modify(1,x,-y);
            }
            else{
                int x,y;
                scanf("%d%d",&x,&y);
                printf("%d\n",query(1,x,y));
            }
        }
    }
    return 0;
}
View Code

 

HDU1166 敌兵布阵(线段树模板)

原文:https://www.cnblogs.com/ctyakwf/p/12507353.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!