题目链接


Solution

直接维护一个差分的线段树就好了.

其中线段树的节点代表 \(r\) 比 \(l\) 多多少.

Code

#include<bits/stdc++.h>
#define ll long long
#define mid (l+r)/2
using namespace std;
const int maxn=100008;
ll sgm[maxn*4],lazy[maxn*4];
ll n,w[maxn],m; void push_down(int node,int l,int r)
{
sgm[node*2]+=lazy[node]*(mid-l+1);
sgm[node*2+1]+=lazy[node]*(r-mid);
lazy[node*2]+=lazy[node];
lazy[node*2+1]+=lazy[node];
lazy[node]=0;
} void build(int node,int l,int r)
{
if(l==r){sgm[node]=w[l]-w[l-1];return;}
build(node*2,l,mid);
build(node*2+1,mid+1,r);
sgm[node]=sgm[node*2]+sgm[node*2+1];
} void change(int node,int l,int r,int L,int R,ll v)
{
if(l>R||r<L)return;
if(l>=L&&r<=R)
{lazy[node]+=v; sgm[node]+=(r-l+1)*v;return;}
push_down(node,l,r);
change(node*2,l,mid,L,R,v);
change(node*2+1,mid+1,r,L,R,v);
sgm[node]=sgm[node*2]+sgm[node*2+1];
} ll query(int node,int l,int r,int L,int R)
{
if(l>R||r<L)return 0;
if(l>=L&&r<=R)
return sgm[node];
push_down(node,l,r);
return query(node*2,l,mid,L,R)+query(node*2+1,mid+1,r,L,R);
} ll read()
{
char ch=getchar(); ll f=1,w=0;
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){w=w*10+ch-'0';ch=getchar();}
return f*w;
} int main()
{
n=read(); m=read();
for(int i=1;i<=n;i++)
w[i]=read();
build(1,1,n);
while(m--)
{
ll opt=read();
ll x,y,v,d;
if(opt==2)
x=read(),
cout<<query(1,1,n,1,x)<<endl;
else
{
x=read(); y=read();
v=read(); d=read();
change(1,1,n,x,x,v);
change(1,1,n,x+1,y,d);
change(1,1,n,y+1,y+1,-(v+(y-x)*d));
}
}
return 0;
}

P1438 无聊的数列 (线段树)的更多相关文章

  1. P1438 无聊的数列 (差分+线段树)

    题目 P1438 无聊的数列 解析: 先考虑修改,用差分的基本思想,左端点加上首项\(k\),修改区间\((l,r]\)内每个数的差分数组都加上公差\(d\),最后的\(r+1\)再减去\(k+(r- ...

  2. [luogu P1438] 无聊的数列

    [luogu P1438] 无聊的数列 题目背景 无聊的YYB总喜欢搞出一些正常人无法搞出的东西.有一天,无聊的YYB想出了一道无聊的题:无聊的数列...(K峰:这题不是傻X题吗) 题目描述 维护一个 ...

  3. Luogu P1438无聊的数列

    洛谷 P1438无聊的数列 题目链接 点这里! 题目描述 维护一个数列\(a_i\),支持两种操作: 给出一个长度等于 \(r-l+1\)的等差数列,首项为\(k\) 公差为\(d\) 并将它对应加到 ...

  4. P1438 无聊的数列

    P1438 无聊的数列 链接 分析: 等差数列可加,首项相加,公差相加. 代码: #include<cstdio> #include<algorithm> #include&l ...

  5. 洛谷P1438 无聊的数列 [zkw线段树]

    题目传送门 无聊的数列 题目背景 无聊的YYB总喜欢搞出一些正常人无法搞出的东西.有一天,无聊的YYB想出了一道无聊的题:无聊的数列...(K峰:这题不是傻X题吗) 题目描述 维护一个数列{a[i]} ...

  6. LUOGU P1438 无聊的数列 (差分+线段树)

    传送门 解题思路 区间加等差数列+单点询问,用差分+线段树解决,线段树里维护的就是差分数组,区间加等差数列相当于在差分序列中l位置处+首项的值,r+1位置处-末项的值,中间加公差的值,然后单点询问就相 ...

  7. 洛谷P1438 无聊的数列 (线段树+差分)

    变了个花样,在l~r区间加上一个等差数列,等差数列的显著特点就是公差d,我们容易想到用线段树维护差分数组,在l位置加上k,在l+1~r位置加上d,最后在r+1位置减去k+(l-r)*d,这样就是在差分 ...

  8. 洛谷 P1438 无聊的数列

    题目背景 无聊的YYB总喜欢搞出一些正常人无法搞出的东西.有一天,无聊的YYB想出了一道无聊的题:无聊的数列...(K峰:这题不是傻X题吗) 题目描述 维护一个数列{a[i]},支持两种操作: 1.1 ...

  9. [洛谷P1438] 无聊的数列

    题目类型:差分,线段树 传送门:>Here< 题意:给出一个数列,每次给一个区间对应的加上一个等差数列,并询问某一个元素目前的值. 解题思路 所谓差分,我个人的理解就是用\(O(1)\)的 ...

随机推荐

  1. MySQL基础教程——mysql脚本编写

    SQL,结构化查询语言,既是对数据库进行操作的语言,也是数据库脚本文件的扩展名. 要求:新建一个名为 library 的数据库,包含 book.reader 两张表,根据自己的理解安排表的内容并插入数 ...

  2. spring5之SAXParseException:cvc-elt.1: 找不到元素 “beans” 的声明

    之前SSM项目一直报错,就是找不到错误  气啊 后来在网上找到了答案:燕来spring5之后就不再需要写版本号了

  3. Python-DDT实现接口自动化

    Get请求参数化例子 import unittest import requests import ddt @ddt.ddt class MyTestCase(unittest.TestCase): ...

  4. 面向对象OO第一单元三次作业总结

    (一)第一单元的作业围绕着多项式的求导,从简单到复杂,主要的要求是 作业一:只有两种格式的因子:带符号整数(+02)和幂函数(x^+02). 作业二:在作业一的基础上添加了:sin(x)和cos(x) ...

  5. web.xml 中 resource-ref 的注意事项

    配置说明: web.xml 中配置 <resource-ref> <description>Employees Database for HR Applications< ...

  6. PMD 编译 语法分析 词法分析 抽象语法树

    编译原理 163 课堂 http://mooc.study.163.com/learn/-1000002001?tid=1000003000#/learn/content?type=detail&am ...

  7. iOS 骰子战争 Dice Wars

    占坑 这个游戏之前在网页端玩过,App Store 上没有搜到特别好的,想自己做个类似的iOS APP 游戏 目测实现难度适中,可玩性较高

  8. iOS 开发 Xib 的嵌套使用

    最近公司项目需要使用 Xib 中嵌套 Xib来布局界面的, 研究了很久才实现!!! 分享给大家,希望帮助到更多的开发者...... 开发中自定义界面有两种方式 一: 纯代码实现 适合单个极度复杂的界面 ...

  9. 洛谷 P1516 青蛙的约会

    https://www.luogu.org/problemnew/show/P1516#sub 题意还是非常好理解的..... 假如这不是一道环形的跑道而是一条直线,你会怎样做呢? 如果是我就会列一个 ...

  10. 【kmp】bzoj3620: 似乎在梦中见过的样子

    考察kmp理解题 Description “Madoka,不要相信 QB!”伴随着 Homura 的失望地喊叫,Madoka 与 QB 签订了契约. 这是 Modoka 的一个噩梦,也同时是上个轮回中 ...