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

    #include<iostream>
    #include<cstdio>
    #include<queue>
    #include<algorithm>
    #include<cstring>
    #include<string>
    #include<bitset>
    #include<stack>
    using namespace std;
    typedef long long LL;
    #define MAXN 50009
    #define N 25
    #define INF 0x3f3f3f3f
    int t, n, a[MAXN];
    struct node
    {
        int l, r, data;
    }T[MAXN * 4];
    void build(int p, int l, int r)
    {
        T[p].l = l, T[p].r = r, T[p].data = 0;
        if (l == r)
        {
            T[p].data = a[l];
            return;
        }
        int mid = (l + r) / 2;
        build(p * 2, l, mid);
        build(p * 2 + 1, mid + 1, r);
        T[p].data = T[p * 2].data + T[p * 2 + 1].data;
    }
    void insert(int p, int k, int v)
    {
        T[p].data += v;
        if (T[p].l == T[p].r && T[p].l == k)
        {
            return;
        }
        int mid = (T[p].l + T[p].r) / 2;
        if (k <= mid)
            insert(p * 2, k, v);
        else
            insert(p * 2 + 1, k, v);
    }
    int query(int p,int l, int r)
    {
        if (T[p].l >= l&&T[p].r <= r)
        {
            return T[p].data;
        }
        int mid = (T[p].l + T[p].r) / 2;
        if (r <= mid)
            return query(p * 2, l, r);
        else if (l > mid)
            return query(p * 2 + 1, l, r);
        else
        {
            return query(p * 2, l, r)
                + query(p * 2 + 1, l, r);
        }
    }
    int main()
    {
        scanf("%d", &t);
        int cas = 1;
        while (t--)
        {
            scanf("%d", &n);
            for (int i = 1; i <= n; i++)
                scanf("%d", &a[i]);
            build(1, 1, n);
            char op[10];
            int a, b, c;
            printf("Case %d:
    ", cas++);
            while (scanf("%s", op), op[0] != 'E')
            {
                scanf("%d%d", &a, &b);
                if (op[0] == 'Q')
                {
                    printf("%d
    ", query(1, a, b));
                }
                else if (op[0] == 'A')
                {
                    insert(1, a, b);
                }
                else if (op[0] == 'S')
                {
                    insert(1, a, -b);
                }
            }
            
        }
    }
  • 相关阅读:
    hdu1251统计难题(trie树)
    线段树
    poj2632Crashing Robots
    UVA10194 Football (aka Soccer)
    hdu1166敌兵布阵(线段树)
    【洛谷P3810】【模板】三维偏序(陌上花开)
    【洛谷P2480】古代猪文
    【洛谷P3449】PALPalindromes
    【洛谷P4777】扩展中国剩余定理(EXCRT)
    【洛谷P2421】荒岛野人
  • 原文地址:https://www.cnblogs.com/joeylee97/p/7338153.html
Copyright © 2011-2022 走看看