题目描述

楼下机房的LYL有n个妹子,分别编号为a1,a2……an,每个妹子都拥有一定数量的小饼干。有一天,saruka没有吃晚饭,饿的不要不要的,这时,他忽然想起了LYL的妹子们有小饼干可以吃。于是,saruka就去找LYL。不过LYL并不想让saruka轻易地从自己的妹子们手中拿走小饼干,于是,LYL就给saruka出了一道题,如果saruka可以做对,就把小饼干给saruka。可是saruka已经饿的辣眼睛了,根本没有力气再来做题了,你能来帮一帮saruka嘛?题目是这样的,你要进行两种操作,一种操作是代替LYL给区间[a,b]的妹子们每人发一定数量的小饼干,另一种操作是查询一下区间[a,b]的妹子们一共拥有多少块小饼干。

输入输出格式

输入格式:

第一行有两个整数n和q,分别表示LYL的妹子的数量和要进行的操作的次数。

第二行有n个数,表示初始状态下每个妹子拥有的小饼干数。

接下来的q行,每行有一个操作:

“C a b c”表示给区间[a,b]的妹子们每人发c块小饼干;

“Q a b”表示查询一下区间[a,b]的妹子们一共有多少小饼干。

输出格式:

一共有Q行,每行一个整数,表示妹子们有的饼干数(也就是只用输出操作Q的结果)。

输入输出样例

输入样例#1:

10 5
1 2 3 4 5 6 7 8 9 10
Q 4 4
Q 1 10
Q 2 4
C 3 6 3
Q 2 4
输出样例#1:

4
55
9
15

说明

1 ≤ n,q ≤ 100000

0 ≤ ai ≤ 1000000000

-10000 ≤ C ≤ 10000

请注意,C的值可以为负,也就是说LYL可以从妹子手中拿走小饼干。这个家伙!!

因为题面很有趣就写了。

实际上是裸的线段树区间修改

 /*by SilverN*/
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#define ls l,mid,rt<<1
#define rs mid+1,r,rt<<1|1
#define LL long long
using namespace std;
const int mxn=;
struct node{
LL sum;
LL mk;
}t[mxn<<];
LL data[mxn];
int n,q;
void update(int l,int r,int rt){
if(l==r){t[rt].mk=;return;}
int mid=(l+r)>>;
t[rt<<].sum+=t[rt].mk*(mid-l+);
t[rt<<|].sum+=t[rt].mk*(r-mid);
t[rt<<].mk+=t[rt].mk;
t[rt<<|].mk+=t[rt].mk;
t[rt].mk=;
return;
}
void Build(int l,int r,int rt){
if(l==r){
t[rt].sum=data[l];
t[rt].mk=;
return;
}
int mid=(l+r)>>;
Build(ls);
Build(rs);
t[rt].sum=t[rt<<].sum+t[rt<<|].sum;
return;
}
void change(int L,int R,LL v,int l,int r,int rt){
if(L<=l && r<=R){
t[rt].mk+=v;
t[rt].sum+=v*(r-l+);
return;
}
int mid=(l+r)>>;
if(t[rt].mk)update(l,r,rt);
if(L<=mid)change(L,R,v,ls);
if(R>mid)change(L,R,v,rs);
t[rt].sum=t[rt<<].sum+t[rt<<|].sum;
return;
}
LL query(int L,int R,int l,int r,int rt){
if(L<=l && r<=R){
return t[rt].sum;
}
int mid=(l+r)>>;
LL res=;
if(t[rt].mk)update(l,r,rt);
if(L<=mid)res+=query(L,R,ls);
if(R>mid)res+=query(L,R,rs);
return res;
}
int main(){
scanf("%d%d",&n,&q);
int i,j;
for(i=;i<=n;i++)scanf("%d",&data[i]);
Build(,n,);
char op[];int x,y;LL c;
while(q--){
scanf("%s",op);
if(op[]=='Q'){
scanf("%d%d",&x,&y);
printf("%lld\n",query(x,y,,n,));
}
else{
scanf("%d%d%lld",&x,&y,&c);
change(x,y,c,,n,);
}
}
return ;
}

洛谷U5653 宋荣子的小饼干的更多相关文章

  1. 洛谷 P3951 NOIP 2017 小凯的疑惑

    洛谷 P3951 NOIP 2017 小凯的疑惑 题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付 ...

  2. 【洛谷2304_LOJ2134】[NOI2015]小园丁与老司机(动态规划_网络流)

    题目: 洛谷 2304 LOJ 2134 (LOJ 上每个测试点有部分分) 写了快一天 -- 好菜啊 分析: 毒瘤二合一题 -- 注意本题(及本文)使用 \(x\) 向右,\(y\) 向上的「数学坐标 ...

  3. 洛谷 P2709 BZOJ 3781 小B的询问

    题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求$\sum_1^Kc_i^2$的值,其中$c_i$表示数字i在[L..R]中的重复次数.小B请 ...

  4. 不失一般性和快捷性地判定决策单调(洛谷P1912 [NOI2009]诗人小G)(动态规划,决策单调性,单调队列)

    洛谷题目传送门 闲话 看完洛谷larryzhong巨佬的题解,蒟蒻一脸懵逼 如果哪年NOI(放心我这样的蒟蒻是去不了的)又来个决策单调性优化DP,那蒟蒻是不是会看都看不出来直接爆\(0\)?! 还是要 ...

  5. [洛谷P3697]开心派对小火车

    题目:洛谷P3697 题目大意是有各站停列车(慢车,相邻2站时间A)和特急列车(相邻2站时间B),特急列车在特定站点停靠. 现在加一种快速列车(相邻2站时间C,A>C>B),停靠K站(包括 ...

  6. 【洛谷P4251】[SCOI2015]小凸玩矩阵(二分+二分图匹配)

    洛谷 题意: 给出一个\(n*m\)的矩阵\(A\).现要从中选出\(n\)个数,任意两个数不能在同一行或者同一列. 现在问选出的\(n\)个数中第\(k\)大的数的最小值是多少. 思路: 显然二分一 ...

  7. [洛谷201704R1]开心派对小火车

    OJ题号:洛谷P3697 思路: 贪心.首先从起点出发,开特急电车,对于每一个特急车站$s_{i}$,分别下一次车,计算从当前车站$s_{i}$出发坐各停电车在指定时限内$t$最远能够到达的车站$r_ ...

  8. 洛谷 P1494 [国家集训队] 小Z的袜子

    题目概述: 小Z把N只袜子从1到N编号,然后从编号L到R(L 尽管小Z并不在意两只袜子是不是完整的一双,甚至不在意两只袜子是否一左一右,他却很在意袜子的颜色,毕竟穿两只不同色的袜子会很尴尬. 你的任务 ...

  9. 洛谷 P2498 [SDOI2012]拯救小云公主 解题报告

    P2498 [SDOI2012]拯救小云公主 题目描述 英雄又即将踏上拯救公主的道路-- 这次的拯救目标是--爱和正义的小云公主. 英雄来到\(boss\)的洞穴门口,他一下子就懵了,因为面前不只是一 ...

随机推荐

  1. [本人开发的游戏] Discuz网页动物园插件1.0Beta发布!让积分流动起来!

        插件发布 插件名称: DZ网页动物园插件 插件来源: 原创插件 适用版本: Discuz! X3 语言编码: GBK简体 UTF8简体 BIG5繁体 UTF8繁体  最后更新时间: 2014- ...

  2. Android--使用VideoView播放视频

    承香墨影 Android--使用VideoView播放视频   前言   之前有讲过如何使用SurfaceView配合MediaPlayer播放视频,其实Android还为开发人员提供了另外一种更简单 ...

  3. Hibernate入门注解笔记

    @Entity 代表实体 映射一张表 @Table 定义表的属性 @Embeddable 定义类级别可以被嵌入 @Id 指定主键 @GeneratedValue 指定主键生成策略 @Column指定列 ...

  4. ORACLE中创建和删除临时表

    CREATE GLOBAL TEMPORARY TABLE TABLENAME (   COL1  VARCHAR2(10),   COL2  NUMBER) ON COMMIT PRESERVE(D ...

  5. Redis缓存数据库详解

    Redis最为常用的数据类型主要有以下五种: 1)String 2)Hash 3)List 4)Set 5)Sorted set 在具体描述这几种数据类型之前,我们先通过一张图了解下Redis内部内存 ...

  6. velocity .vm

    关于.vm 后缀的文件,是velocity的文件.velocity是基于java的一种页面模板引擎,支持#if #else #foreach等写法的前台文件.$link.contextPath是该引擎 ...

  7. 浏览器默认样式(User Agent Stylesheet)

    原文:http://www.zjgsq.com/898.html 不同浏览器对于相同元素的默认样式并不一致,这也是为什么我们在CSS的最开始要写 * {padding:0;marging:0}: 不过 ...

  8. VelocityTracker

    VelocityTracker顾名思义即速度跟踪,在android中主要应用于touch event, VelocityTracker通过跟踪一连串事件实时计算出 当前的速度,这样的用法在androi ...

  9. Node.js开发环境搭建

    1.安装express npm install express -g 2.express33.6以后把express-generator分离出来了,所以还需安装express-generator,否则 ...

  10. MySQL 约束的讲解

    MySQL 约束 作用:保证数据的完整性和一致性按照约束的作用范围分为:表级约束和行级约束.常见的约束类型包括: Not null(非空约束) Primary key (主键约束) Unique ke ...