#include<cstdio>
int lb,rb,data;
long long sum[5000000],extra[5000000];
void add(int l,int r,int now)
{
    if(lb<=l&&rb>=r){
        extra[now]+=data;
        sum[now]+=data*(r-l+1);
        return;
    }
    int mid=(l+r)/2,nl=2*now,nr=2*now+1;
    extra[nl]+=extra[now];
    extra[nr]+=extra[now];
    sum[nl]+=extra[now]*(mid-l+1);
    sum[nr]+=extra[now]*(r-mid);
    extra[now]=0;
    if(rb<=mid) add(l,mid,nl);
    else if(lb>mid) add(mid+1,r,nr);
    else {add(l,mid,nl);add(mid+1,r,nr);}
    sum[now]=sum[nl]+sum[nr];
}
long long query(int l,int r,int now)
{
    if(lb<=l&&rb>=r) return(sum[now]);
    int mid=(l+r)/2,nl=2*now,nr=2*now+1;
    extra[nl]+=extra[now];
    extra[nr]+=extra[now];
    sum[nl]+=extra[now]*(mid-l+1);
    sum[nr]+=extra[now]*(r-mid);
    extra[now]=0;
    if(rb<=mid) return(query(l,mid,nl));
    else if(lb>mid) return(query(mid+1,r,nr));
    else return(query(l,mid,nl)+query(mid+1,r,nr));
}
int main()
{
    int i,j,k,n,m;
    char c[2];
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++){
        scanf("%d",&data);
        lb=rb=i;
        add(1,n,1);
    }
    for(i=1;i<=m;i++){
        scanf("%s",&c);
        switch (c[0]){
            case 'C':
                scanf("%d%d%d",&lb,&rb,&data);
                add(1,n,1);
                break;
            case 'Q':
                scanf("%d%d",&lb,&rb);
                printf("%lld\n",query(1,n,1));
                break;
        }
    }
    return 0;
}

poj3468(线段树 边覆盖)的更多相关文章

  1. poj3468 线段树的懒惰标记

    题目链接:poj3468 题意:给定一段数组,有两种操作,一种是给某段区间加c,另一种是查询一段区间的和 思路:暴力的方法是每次都给这段区间的点加c,查询也遍历一遍区间,复杂度是n*n,肯定过不去,另 ...

  2. POJ3468 线段树(区间更新,区间求和,延迟标记)

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 97196   ...

  3. poj3468 线段树+lazy标记

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 92921   ...

  4. POJ3468(线段树 区间修改 lazy-tag)

    我的线段树真的没救了......还是多练几道吧....... You have N integers, A1, A2, ... , AN. You need to deal with two kind ...

  5. POJ3468(线段树区间维护)

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 85502   ...

  6. poj3468(线段树区间更新&区间求和模板)

    题目链接: http://poj.org/problem?id=3468 题意: 输入 n, m表初始有 n 个数, 接下来 m 行输入, Q x y 表示询问区间 [x, y]的和: C x y z ...

  7. POJ-3468(线段树+区间更新+区间查询)

    A Simple Problem With Integers POJ-3468 这题是区间更新的模板题,也只是区间更新和区间查询和的简单使用. 代码中需要注意的点我都已经标注出来了,容易搞混的就是up ...

  8. poj3468线段树标记永久化

    #include<map> #include<set> #include<list> #include<cmath> #include<queue ...

  9. poj3468 A Simple Problem with Integers(线段树区间更新)

    https://vjudge.net/problem/POJ-3468 线段树区间更新(lazy数组)模板题 #include<iostream> #include<cstdio&g ...

随机推荐

  1. NoSQL性能测试:MongoDB VS SequoiaDB

    作 为NoSQL的一个重要类型,文档型NoSQL通常被认为是最接近传统关系型数据库的NoSQL.文档型NoSQL的核心是数据嵌套,这种设计可以从某种 程度上大大简化传统数据库复杂的关联问题.同时由于摆 ...

  2. php curl抓取远程页面内容的代码

    使用php curl抓取远程页面内容的例子. 代码如下: <?php /** * php curl抓取远程网页内容 * edit by www.jbxue.com */ $curlPost = ...

  3. The architecture of LTE network.

    3GPP定义的LTE网络架构结构变得扁平化,无线RNC/BSC 消失,只有eNodeB.控制面使用MME进行处理,用户面使用SGW和PGW进行处理.相比GSM和UMTS,在逻辑接口上定义了S1/X2逻 ...

  4. OPM与ILE编程模式的区别

    OPM与ILE编程模式的区别 OPM是传统编程模式,即一个可执行的程序只用一种语言编程:一个可执行程序只有一段程序代码组成:程序之间的调用关系是动态的调用关系. ILE是多语言开发集成编程模式,即一个 ...

  5. wpf 绑定ObservableCollection 的Count属性

    相信大家都遇到过这样的需求,DataGrid里显示符合筛选条件的学生列表,上方TextBolck里显示学生总数,大家可以这样做: 1,XAML代码 <Window x:Class="O ...

  6. Wpf 简单制作自己的窗体样式

    最近一直在搞wpf相关的东东,由于还在门外徘徊,所以第一篇blog写了简单的制作扁平化的wpf button样式,这一篇也简单的制作属于自己wpf 窗体的样式. 废话少说,下面就开始制作自己的窗体样式 ...

  7. Oracle全表扫描

    优化器在形成执行计划时需要做的一个重要选择——如何从数据库查询出需要的数据.对于SQL语句存取的任何表中的任何行,可能存在许多存取路径(存取方法),通过它们可以定位和查询出需要的数据.优化器选择其中自 ...

  8. PHP 对数组数值进行排序,使用另一个容器

    <?php /* 排序方式::事实上只需要将要循环的数组进行N次循环,然后每次取最大的一个值*/ $array = array(100,25,10,258,33,48,10,5,13,58,33 ...

  9. IOS 学习教程

    IOS 学习教程http://www.gaixue.com/course/236#### 讲课http://wenku.baidu.com/view/6786064fe518964bcf847c63. ...

  10. UILabel设置行间距和字间距并计算高度-b

    #define UILABEL_LINE_SPACE 6 #define HEIGHT [ [ UIScreen mainScreen ] bounds ].size.height //给UILabe ...