• LightOJ 1112


    题目链接


    题意:
    给定一个序列,有三个操作

    • 1 i 输出第i个数的大小,并将其变为0
    • 2 i v 第i个数增加v
    • 3 i j 输出第i个数到第j个数的和

    树状数组模板题

    #include <stdio.h>
    #include <iostream>
    #include <string.h>
    #include <stdlib.h>
    #include <vector>
    #include <algorithm>
    #include <queue>
    #include <map>
    #include <stack>
    #include <string>
    #include <math.h>
    #include <bitset>
    #include <ctype.h>
    using namespace std;
    typedef pair<int,int> P;
    typedef long long LL;
    const int INF = 0x3f3f3f3f;
    const double PI = acos(-1.0);
    const double eps = 1e-9;
    const int N = 1e5 + 5;
    const int mod = 1e9 + 7;
    int t, kase = 0;
    int c[N];
    int n,q,type,x,y;
    inline int lowbit(int i)
    {
        return i&(-i);
    }
    void add(int x, int val)
    {
        while(x <= n)
        {
            c[x] += val;
            x += lowbit(x);
        }
    }
    int sum(int x)
    {
        int res = 0;
        while(x)
        {
            res += c[x];
            x -= lowbit(x);
        }
        return res;
    }
    
    int main()
    {
        scanf("%d", &t);
        while(t--)
        {
            printf("Case %d:
    ", ++kase);
            scanf("%d%d", &n, &q);
            memset(c, 0, sizeof(c));
            for(int i = 1; i <= n; i++)
            {
                scanf("%d", &x);
                add(i, x);
            }
            while(q--)
            {
                scanf("%d", &type);
                if(type == 1)
                {
                    scanf("%d", &x);
                    x++;
                    int ans = sum(x) - sum(x-1);
                    add(x, -ans);
                    printf("%d
    ", ans);
                }
                else if(type == 2)
                {
                    scanf("%d%d", &x,&y);
                    x++;
                    add(x, y);
                }
                else
                {
                    scanf("%d%d", &x, &y);
                    x++;y++;
                    int ans = sum(y) - sum(x-1);
                    printf("%d
    ", ans);
                }
            }
        }
        return 0;
    }
    
  • 相关阅读:
    014.Python函数
    013.Python的文件操作
    012.Python的字典和集合的相关函数
    011.Python的列表的相关操作
    010.Python字符串的格式化
    009.Python字符串相关函数
    008.Python循环for循环
    007.Python循环语句while循环嵌套
    Java 反射机制 初探*
    Java 正则初探
  • 原文地址:https://www.cnblogs.com/Alruddy/p/7471061.html
Copyright © 2020-2023  润新知