• 敌兵布阵


    这道题,题意比较简单,原本打算一路上全部for过去的,然而是我想太多,不断超时,只能使用线段树,线段树的话,我可能讲不清,所以就直接贴代码吧。可以好好查资料的说,很多博客里面都会有详解。

    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    using namespace std;
    const int maxn = 55555;
    int hua[maxn << 2];
    void PushUp(int rt)
    {
        hua[rt] = hua[rt << 1] + hua[rt << 1 | 1];
    }
    
    void build(int l, int r, int rt)
    {
        if (l == r)
        {
            scanf("%d", &hua[rt]);
            return;
        }
        int m = (l + r) >> 1;
        build(l, m, rt << 1);
        build(m + 1, r, rt << 1 | 1);
        PushUp(rt);
    }
    
    void update(int p, int add, int l, int r, int rt)
    {
        if (l == r)
        {
            hua[rt] += add;
            return;
        }
        int m = (l + r) >> 1;
        if (p <= m) update(p, add, l, m, rt << 1);
        else update(p, add, m + 1, r, rt << 1 | 1);
        PushUp(rt);
    }
    
    int query(int ll, int rr, int l, int r, int rt)
    {
        if (ll <= l && rr >= r) return hua[rt];
        int m = (l + r) >> 1;
        int ret = 0;
        if (ll <= m) ret += query(ll, rr, l, m, rt << 1);
        if (rr > m) ret += query(ll, rr, m + 1, r, rt << 1 | 1);
        return ret;
    }
    
    int main()
    {
        int t, c;
        char d[10];
        scanf("%d", &t);
        for (c = 1; c <= t; c++)
        {
            printf("Case %d:
    ", c);
            int n;
            scanf("%d", &n);
            build(1, n, 1);
            while (scanf("%s", d) != EOF)
            {
                if (d[0] == 'E') break;
                int x, y;
                scanf("%d%d", &x, &y);
                if (d[0] == 'Q')
                {
                    int ans = query(x, y, 1, n, 1);
                    printf("%d
    ", ans);
                }
                if (d[0] == 'S') update(x, -y, 1, n, 1);
                if (d[0] == 'A') update(x, y, 1, n, 1);
            }
        }
        return 0;
    }
    

      

  • 相关阅读:
    MySQL的注释方式
    textarea属性
    htm,css,javascript及其他的注释方式
    修改背景颜色&字体&窗口标题及大小
    <xmp>标签及它与<pre>标签的区别
    替换文本是什么
    linux命令修改IP信息
    html大全
    MyEclipse>Error Log的查看方法
    WPF地区选择控件(内附下载地址)
  • 原文地址:https://www.cnblogs.com/yintoki/p/5696822.html
Copyright © 2020-2023  润新知