HDU-1166 敌兵布阵

来源:互联网 发布:windows 挂载 编辑:程序博客网 时间:2024/06/03 16:19
#include <iostream>#include <cstdio>using namespace std;#define lson l, m, rt << 1#define rson m + 1, r, rt << 1 | 1const int maxn = 55555;int sum[maxn<<2];void PushUp(int rt){    sum[rt] = sum[rt<<1] + sum[rt<<1|1];}void build(int l, int r, int rt){    if(l == r)    {        scanf("%d",&sum[rt]);        return ;    }    int m = (l + r) >> 1;    build(lson);    build(rson);    PushUp(rt);}void update(int p, int add, int l, int r, int rt){    if(l == r)    {        sum[rt] += add;        return ;    }    int m = (l + r) >> 1;    if(p <= m) update(p, add, lson);    else update(p, add, rson);    PushUp(rt);}int query(int L, int R, int l, int r, int rt){    if(L <= l && r <= R)    {        return sum[rt];    }     int m = (l + r) >> 1;     int ret = 0;     if(L <= m) ret += query(L, R, lson);     if(R > m) ret += query(L, R, rson);     return ret;}int main(){    int T, n,cas = 0;    cin >> T;    while(T--)    {        cout << "Case " << ++cas << ":" << endl;        cin >> n;        build(1,n,1);        char op[10];        while(cin >> op)        {            if(op[0] == 'E')                break;            int a, b;            cin >> a >> b;            if(op[0] == 'Q')                cout << query(a, b, 1, n, 1) << endl;            else if(op[0] == 'S')                update(a, -b, 1, n, 1);            else                update(a, b, 1, n, 1);        }    }    return 0;}
题意:
第一行一个整数T,表示有T组数据。 每组数据第一行一个正整数N(N<=50000),表示敌人有N个工兵营地,接下来有N个正整数,第i个正整数ai代表第i个工兵营地里开始时有ai个人(1<=ai<=50)。 接下来每行有一条命令,命令有4种形式: (1) Add i j,i和j为正整数,表示第i个营地增加j个人(j不超过30) (2)Sub i j ,i和j为正整数,表示第i个营地减少j个人(j不超过30); (3)Query i j ,i和j为正整数,i<=j,表示询问第i到第j个营地的总人数; (4)End 表示结束,这条命令在每组数据最后出现; 每组数据最多有40000条命令
输出query。
题解:建线段树吧..掌握模板 掌握模板..有点难有点难..开始学开始学。 函数PushUp更新父节点,函数build建树,函数pudate单点更新,函数query区间求和。
还有用cin会超时。
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 头发掉得太厉害怎么办 头发出油很厉害怎么办 头发半天就油了怎么办 头发一天就油了怎么办 头发油洗头掉发怎么办 头发油就掉头发怎么办 2岁儿童头发稀少怎么办 1岁宝宝头发稀少怎么办 头发又细又油怎么办 斑秃长了又掉怎么办 2岁宝贝头发稀少怎么办 25岁小伙掉头发怎么办 头发又细又软怎么办 甲减引起掉头发怎么办 掉头发严重怎么办40岁 4岁宝宝头发稀少怎么办 25岁头发顶脱发怎么办 头发细又少和软怎么办 头顶上头发少怎么办呢 3岁宝贝头发稀少怎么办 2岁幼儿头发稀少怎么办 小孩头发太少了怎么办 头发少盘丸子头怎么办 油头发掉的厉害怎么办 头顶头发长得慢怎么办 每次洗头发都掉很多头发怎么办 拔了头发不长怎么办 6岁儿童头发稀少怎么办 2岁宝宝胆子小怎么办 坐到小孩的头怎么办 托班幼儿不刷牙怎么办 两岁的宝宝蛀牙怎么办 小孩在学校被打怎么办 油画棒画在墙上怎么办 宝宝把蜡笔吃了怎么办 吃鸡更新了怎么办开始 数字画涂料干了怎么办 广告画颜料干了怎么办 宝宝断奶后瘦了怎么办 腿一个粗一个细怎么办 两条小腿不一样粗怎么办