码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 1166 敌兵布阵

时间:2019-02-10 12:19:32      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:uil   hup   typedef   pac   memset   scanf   +=   线段   long   

传送门:HDU 1166 敌兵布阵
算法分析:线段树模板,注意读入处理
---

#include<iostream>
#include<cstdio>
#include<cstring>
#define maxN 100000
#define mid ((l+r)>>1)
#define ls k<<1
#define rs k<<1 | 1
using namespace std;
typedef long long ll;
ll sum[4*maxN+1],v[4*maxN+1];
void pushup(int);
void update(int,int,int,int,int,int);
void pushdown(int,int,int);
ll query(int,int,int,int,int);
void build(int,int,int);
int n,x,y,t;
char s[6];
void task(int);
int main()
{
    scanf("%d",&t);
    for(int i=1;i<=t;i++) task(i);
    return 0;
}
void task(int cas)
{
    memset(sum,0,sizeof(sum));
    memset(v,0,sizeof(v));
    scanf("%d",&n); build(1,1,n);
    printf("Case %d:\n",cas);
    while(true)
    {
        scanf("%s",s);
        if(!strcmp(s,"End")) break;
        scanf("%d%d",&x,&y);
        if(!strcmp(s,"Query")) printf("%lld\n",query(1,1,n,x,y));
        if(!strcmp(s,"Add")) update(1,1,n,x,x,y);
        if(!strcmp(s,"Sub")) update(1,1,n,x,x,-y);
    }
}
void pushup(int k) {sum[k]=sum[ls]+sum[rs];}
void update(int k,int l,int r,int ql,int qr,int u)
{
    if(ql<=l && r<=qr)
    {
        sum[k]+=u*(r-l+1);
        v[k]+=u; return;
    }
    if(v[k]) pushdown(k,l,r);
    if(ql<=mid) update(ls,l,mid,ql,qr,u);
    if(qr>mid) update(rs,mid+1,r,ql,qr,u);
    pushup(k);
}
ll query(int k,int l,int r,int ql,int qr)
{
    if(ql<=l && r<=qr) return sum[k];
    if(v[k]) pushdown(k,l,r);
    long long ans=0;
    if(ql<=mid) ans+=query(ls,l,mid,ql,qr);
    if(qr>mid) ans+=query(rs,mid+1,r,ql,qr);
    return ans;
}
void build(int k,int l,int r)
{
    if(l==r) {scanf("%lld",&sum[k]); return;}
    build(ls,l,mid);
    build(rs,mid+1,r);
    pushup(k);
}
void pushdown(int k,int l,int r)
{
    v[ls]+=v[k]; v[rs]+=v[k];
    sum[ls]+=(mid-l+1)*v[k];
    sum[rs]+=(r-mid)*v[k];
    v[k]=0;
}

HDU 1166 敌兵布阵

标签:uil   hup   typedef   pac   memset   scanf   +=   线段   long   

原文地址:https://www.cnblogs.com/ezsyshx/p/10358893.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!