Light oj 1112 - Curious Robin Hood(树状数组)

简介: 有n个数,有m组操作,1 i表示将第i个数先输出,然后置0, 2 i v 表示给第i个数加上v, 3 i j 表示求i 到 j 的和,注意,这里数组是从0开始的,而我们构造的树状数组是从1开始的,使用在程序中要进行一定的处理。

题意:

  有n个数,有m组操作,1 i表示将第i个数先输出,然后置0, 2 i v 表示给第i个数加上v, 3 i j 表示求i 到 j 的和,注意,这里数组是从0开始的,而我们构造的树状数组是从1

开始的,使用在程序中要进行一定的处理。

//LA 1112 - Curious Robin Hood(树状数组)
//2013-04-13-08.22
#include <stdio.h>
#include <string.h>
const int maxn = 100010;
int a[maxn], b[maxn];
int n;
int lowbit(int x)
{
    return x&(-x);
}
void update(int x, int v)
{
    while (x <= n)
    {
        a[x] += v;
        x += lowbit(x);
    }
}
int getsum(int x)
{
    int sum = 0;
    while (x)
    {
        sum += a[x];
        x -= lowbit(x);
    }
    return sum;
}
int main()
{
    int t, m;
    scanf("%d",&t);
    for (int k = 1; k <= t; k++)
    {
        scanf("%d %d",&n, &m);
        memset(a, 0 ,sizeof(a));
        for (int i = 1; i <= n; i++)
        {
            scanf("%d",&b[i]);
            update(i, b[i]);
        }
        int op, i, v, j;
        printf("Case %d:\n",k);
        while (m--)
        {
            scanf("%d",&op);
            if (op == 1)
            {
                scanf("%d",&i);
                printf("%d\n",b[i+1]);
                update(i+1, -b[i+1]);
                b[i+1] = 0;
            }
            else if (op == 2)
            {
                scanf("%d %d",&i, &v);
                update(i+1, v);
                b[i+1] += v;
            }
            else
            {
                scanf("%d %d",&i,&j);
                printf("%d\n",getsum(j+1) - getsum(i));
            }
        }
    }
    return 0;
}


目录
相关文章
|
机器学习/深度学习 存储
light oj 1011 - Marriage Ceremonies (状态压缩+记忆化搜索)
light oj 1011 - Marriage Ceremonies (状态压缩+记忆化搜索)
45 0
light oj 1159 - Batman LCS
学过简单动态规划的人应该对最长公共子序列的问题很熟悉了,这道题只不过多加了一条字符串变成三条了,还记得,只要把状态变成三维的即可。
37 0
|
机器学习/深度学习
light oj 1005 - Rooks(组合数学)
组合数学解法 现在n行中选出m行,C(n,m),再在n列中选出m列随便放A(n,m),答案为C(n,m)*A(n,m)。
40 0
|
算法
light oj 1047 - Neighbor House 动态规划
动态规划,这个和刘汝佳算法竞赛入门经典P158的数字三角形有些相似,不过是求最小的值,而且有些限制,每次走到点和上次走的点不在同一列。
34 0
Codeforces Round #748 (Div. 3) E. Gardener and Tree(拓扑排序)
Codeforces Round #748 (Div. 3) E. Gardener and Tree(拓扑排序)
96 0
|
人工智能 Java
[HDU 7136] Jumping Monkey | 并查集 | 逆向思维
Jumping Monkey Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 747 Accepted Submission(s): 360
229 0
[HDU 7136] Jumping Monkey | 并查集 | 逆向思维
|
Java
HDOJ/HDU 1297 Children’s Queue(推导~大数)
HDOJ/HDU 1297 Children’s Queue(推导~大数)
143 0
|
机器学习/深度学习
HDOJ/HDU 1556 Color the ball(树状数组)
HDOJ/HDU 1556 Color the ball(树状数组)
105 0
|
Java BI 机器学习/深度学习