#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. AngularJS(10)-数据验证

    AngularJS 表单和控件可以提供验证功能,并对用户输入的非法数据进行警告.客户端的验证不能确保用户输入数据的安全,所以服务端的数据验证也是必须的. <!DOCTYPE html> & ...

  2. WAMP环境的安装与测试

    首先来点其他的补充:web服务的发展历程 对等网服务模式 没有专门的服务器,也没有专门的客户端!无法提供可靠的服务! C/S模式 client/server,各自安装不同的客户端和服务器端! B/S模 ...

  3. python自定义线程池

    关于python的多线程,由与GIL的存在被广大群主所诟病,说python的多线程不是真正的多线程.但多线程处理IO密集的任务效率还是可以杠杠的. 我实现的这个线程池其实是根据银角的思路来实现的. 主 ...

  4. 题目1444:More is better

    时间限制:3 秒 内存限制:100 兆 特殊判题:否 提交:1362 解决:640 题目描述: Mr Wang wants some boys to help him with a project. ...

  5. XSS前端防火墙

    前一段时间,在EtherDream大神的博客里看到关于XSS防火墙的一系列文章,觉得很有意思.刚好科创要做一个防火墙,就把XSS前端防火墙作为一个创新点,着手去实现了. 在实现过程中,由于各种原因,比 ...

  6. ios 中的小技巧 - 总有你想要的 一

    UITableView的Group样式下顶部空白处理 在viewWillAppear里面添加如下代码: //分组列表头部空白处理 CGRect frame = myTableView.tableHea ...

  7. 拼音操作工具类 - PinyinUtil.java

    拼音操作工具类,提供字符串转换成拼音数组.汉字转换成拼音.取汉字的首字母等方法. 源码如下:(点击下载 -PinyinUtil.java.pinyin4j-2.5.0.jar ) import net ...

  8. arguments.callee查询调用b函数的是哪个函数

    // function functionname(){ // function b(){ // console.log(arguments.callee.caller.name); // } // b ...

  9. Matlab中添加搜索目录

    一.问题来源 来自于一份大规模hash图像检索代码. 二.问题解析 2.1 添加目录 addpath('./utils/'); 2.2 添加目录及其子目录 addpath(genpath('./uti ...

  10. CrackMe_001

    本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注册机的东西. 其中,文章中按照如下逻辑编排(解决如 ...