`

poj 3468 树状数组

    博客分类:
  • acm
 
阅读更多
http://kenby.iteye.com/blog/962159

///我只想存个代码,思路来源解法都是上面那个网站看的
#include <stdio.h>
#include <string.h>
using namespace std;
const int N = 100000+10;
long long det[N],num[N],sum[N];
long long  c1[N],c2[N];
int l,r,m,n;
char st[10];
int lowbit(int x)
{
    return x&(-x);
}
void update(long long *array,int l,long long val)
{
    while(l<=n)
    {
        array[l]+=val;
        l+=lowbit(l);
    }
}
long long getsum(long long *array,int l)
{
    long long ans = 0;
    while(l>0)
    {
        ans+=array[l];
        l-=lowbit(l);
    }
    return ans;
}
int main()
{
    int t;
    scanf("%d %d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        scanf("%lld",&num[i]);
        sum[i] = sum[i-1]+num[i];
    }
    while(m--)
    {
        scanf("%s",st);
        if(st[0]=='C')
        {
            scanf("%d %d %d",&l,&r,&t);
            update(c1,l,t);
            update(c1,r+1,-t);
            update(c2,l,t*l);
            update(c2,r+1,-t*(r+1));
        }
        else
        {
            scanf("%d %d",&l,&r);
            long long xx = 0;
            xx = sum[r] - sum[l-1];
            xx+= (r+1)*getsum(c1, r) - getsum(c2, r);
            xx -= (l*getsum(c1, l-1) - getsum(c2, l-1));
            printf("%lld\n",xx);
        }
    }
    return 0;
}

分享到:
评论

相关推荐

    POJ3468.zip_poj3468

    在解决POJ3468这个题目时,参赛者可能需要理解并熟练运用树状数组来处理区间操作。例如,题目可能给出一个数组和一系列的指令,指令包括两种类型:一种是将某个区间内的所有元素都加上一个常数值,另一种是询问某一...

    树状数组练习:POJ 3067

    【标题】"树状数组练习:POJ 3067" 树状数组,也称为线段树(Segment Tree),是一种高效的数据结构,用于处理区间查询和修改问题。在这个问题中,我们通过分析POJ 3067的题目来探讨如何应用树状数组解决实际问题。...

    树状数组练习:POJ 2481(JAVA)

    【标题】"树状数组练习:POJ 2481(JAVA)" 是一篇关于使用树状数组(也称为线段树)解决编程竞赛问题的文章。这篇文章可能详细讲解了如何运用这种数据结构来解决特定的问题POJ 2481。POJ(Programming Online Judge)...

    poj 2352 stars(树状数组,线段树)

    ### POJ 2352 Stars - 树状数组与线段树实现 #### 题目背景 POJ 2352 Stars 是一道经典的算法题目,它提供了使用树状数组或线段树来解决的可能性。这两种数据结构都是为了高效处理区间查询问题而设计的。在这篇...

    二维树状数组学习之二:练习POJ 1195

    在本篇中,我们将深入学习二维树状数组的应用,并通过解决POJ 1195问题来实践这一概念。 POJ 1195题目要求我们计算一个二维矩阵中的子矩阵之和。这正是二维树状数组的优势所在,因为我们可以快速地对矩阵的任意矩形...

    二维树状数组练习 POJ 2029

    它扩展了一维树状数组(也称作线段树),能够处理二维或多维的数组更新和查询操作。在POJ 2029这个题目中,我们可能面临的问题是需要对一个二维矩阵进行动态更新和求和查询,例如计算某一个矩形区域内的元素总和。 ...

    图的深搜+树状数组练习 POJ 3321(JAVA)

    标题中的“图的深搜+树状数组练习 POJ 3321(JAVA)”指的是一个编程题目,其中涉及到图的深度优先搜索(DFS, Depth First Search)算法和树状数组(也称为线段树,Segment Tree)的数据结构。这个题目来源于POJ...

    树状数组题解1

    树状数组,又称线段树(Segment Tree),是一种用于高效解决区间查询与修改问题的数据结构。在上述题目中,树状数组被广泛应用于各种不同的场景,如星星坐标的等级计算、矩阵操作、序列排序优化以及线路交叉点的计算...

    树状数组(Binary Indexed Tree)

    **树状数组**(Binary Indexed Tree, BIT),又称**费尼克树**(Fenwick Tree),是一种特殊的数据结构,它能高效地完成对数组元素的累加查询和更新操作。相较于其他数据结构如线段树,树状数组在实现上更为简洁,...

    ACM数据结构之树状数组和线段树

    ### ACM数据结构之树状数组和线段树 #### 线段树 线段树是一种非常有效的数据结构,主要用于解决区间查询问题。它能够快速地处理区间内的各种操作,如查询、修改等。 ##### 线段树的定义与特性 线段树本质上是一...

    poj1990.rar_POJ 19_poj_poj19

    首先,我们要理解树状数组(也称作线段树)这一数据结构。树状数组是一种用于高效处理区间查询和修改的结构,其基础是每个节点存储一个区间内的累积信息。对于POJ 1990题目,我们需要解决的问题可能涉及到对某一区间...

    线段树入门学习(二)(兼解POJ3468) JAVA

    线段树将一个大区间(通常是一维数组)分成多个小区间,每个节点代表一个子区间,通过递归的方式构建树形结构。线段树的根节点代表整个区间,叶子节点则对应原区间中的元素。非叶子节点的值通常是由其子节点值通过...

    史上最全poj题目分类

    树状数组是一种常用的数据结构,树状数组的核心思想是将数据存储在一个树形结构中,然后通过树的遍历进行搜索。例如,在搜索中,树状数组可以用于快速地搜索数据。 数学 数论是一种常用的数学思想,数论的核心思想...

    经典 的POJ 分类

    - POJ 3264、POJ 3368:树状数组的构造与更新。 #### 字符串匹配 - **题目示例**: - POJ 1961、POJ 2406:KMP算法的应用。 ### 其他问题 #### 贪心算法 - **题目示例**: - POJ 3411、POJ 1724:贪心策略的...

    poj 3342(树状dp)

    在题目描述中提到,一个公司内部的员工关系构成一棵树形结构,其中每个员工(除了最高级别的老板)都有一个直属上司。公司计划举办一场聚会,希望邀请尽可能多的员工参加。但存在一定的限制条件:如果某员工参加聚会...

    POJ2352代码

    ### POJ 2352:星图级别分布问题解析 #### 问题描述 本问题主要涉及天文学家对星图的研究。在星图中,星星被表示为平面上的点,并且每个星星都有对应的笛卡尔坐标(X, Y)。定义一个星星的“级别”为在它左下方的...

    ACMer需要掌握的算法讲解.docx

    3. 最小树形图(poj3164) 4. 次小生成树 5. 无向图、有向图的最小环 三、数据结构 1. RMQ(poj3264, poj3368) 2. 并查集的高级应用(poj1703, poj2492) 3. KMP 算法(poj1961, poj2406) 4. 左偏树(可合并堆)...

    acm poj300题分层训练

    poj2528、poj2777等是线段树的题目,poj2482、poj2352等涉及平衡树,poj1195、poj3321则训练了树状数组。 5. **搜索算法的优化**:poj1699、poj3411等训练搜索技巧和剪枝方法,poj3373、poj1691则介绍了记忆化搜索。...

Global site tag (gtag.js) - Google Analytics