zoukankan      html  css  js  c++  java
  • 敌兵布阵

    这道题,题意比较简单,原本打算一路上全部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;
    }
    

      

  • 相关阅读:
    BE Learing 2 名词解释
    mysql学习笔记(二)之一个粗心的问题
    Struts2/XWork < 2.2.0远程执行任意代码漏洞分析及修补
    DataReceivedEventHandler 委托
    JS数组方法汇总 array数组元素的添加和删除
    jQuery学习总结(一)
    js的lock
    mysql学习笔记(一)之mysqlparameter
    Time Span Attack
    Web Vulnerability Scanner 7.0 Patch for 2010_09_21_01
  • 原文地址:https://www.cnblogs.com/yintoki/p/5696822.html
Copyright © 2011-2022 走看看