#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. JS禁用和启用鼠标滚轮滚动事件

    // left: 37, up: 38, right: 39, down: 40, // spacebar: 32, pageup: 33, pagedown: 34, end: 35, home: ...

  2. 普通用户开启AUTOTRACE 功能

    AUTOTRACE是一个SQL*Plus工具,用于跟踪SQL的执行计划,收集执行时所耗用资源的统计信息.系统账户本身具有AUTOTRACE,其他账户需要通过手动赋予 一. 用系统账户登录(DBA) S ...

  3. java环境搭建的问题

    本人用eclipse开发,首先在java官网中下载最新版本的jdk,jdk的版本一定要与eclipse版本位数相同,否则会提示错误“Java was started but returned exit ...

  4. NotifyIcon制作任务栏托盘菜单

    常用软件飞信.QQ在任务栏中的图标ICO,以及鼠标移动到图标是右键菜单选项 1.首先制作任务栏图标 this.ShowInTaskbar = true; 2.窗体最小化时或者关闭时隐藏到任务栏,有时候 ...

  5. oracle创建表空间、用户

    创建表空间 create tablespace '<数据库名>' datafile '<存储路径>' size 500M default storage (initial 20 ...

  6. java实现附件预览(openoffice+swfTools+FlexPaper) (转载)

    下边例子是在网上找了一个网友做的例子,在次记录 1.概述 主要原理 1.通过第三方工具openoffice,将word.excel.ppt.txt等文件转换为pdf文件 2.通过swfTools将pd ...

  7. Ubuntu 设置root用户登录

    由于 Ubuntu 是基于 Debian 的 linux 操作系统,在默认的情况下,是没有超级用户(superuser, root)的,但有些系统操作必须有超级用户的权限才能进行,如手动释放内存等.  ...

  8. iOS 支付宝应用(备用参考)

    1:先与支付宝签约,获得商户ID(partner)和账号ID(seller) 2:下载相应的公钥私钥文件(加密签名用) 3:下载支付宝SDK 4:生成订单信息5:调用支付宝客户端,由支付宝客户端跟支付 ...

  9. 关于Oracle数据库中SQL空值排序的问题

    在Oracle中进行查询排序时,如果排序字段里面有空值的情况下,排序结果可能会达不到自己想要的结果.   如 select * from tableTest order by VISITS desc ...

  10. 关于WinForm引用WPF窗体

    项目中有个界面展示用WPF实现起来比较简单,并且能提供更酷炫的效果,但是在WinForm中使用WPF窗体出现了问题,在网上找了一下有些人说Winform不能引用WPF的窗体,我就很纳闷,Win32都能 ...