背景

看到题解都是差分,竟然还有建两颗线段树和二阶差分的大佬。

我感到不理解,很不理解。

题目正解

本题正解很明显就是:线段树

是的,你没有看错,就只有线段树。

很显然我们直接按照线段树板题写就可以了,维护题目需要维护的,注意到只有单点查询,所以我们根本不需要维护区间和,对于区间来讲,我们只用维护修改操作,修改操作只需要 \(k,d\)(首项和公差)。

考虑该操作如何向下传递(pushdown):

  1. 对于左区间来讲,\(k,d\) 没有改变,直接赋值。
  2. 对于右区间来讲,只有 \(k_{right}=k_{father}+len*d\),其中 \(len\) 是左区间长度。

此外我们发现:对于同一段区间,修改操作是可以叠加的。

好的,我们做完了,甚至不需要 pushup 操作。

是的,就是这么简单,当区间变成一个点时,我们发现对于这个点的修改就是加上 \(k\)。

AC 代码:

#include<bits/stdc++.h>
using namespace std;
#define N 500000
#define ls rt<<1
#define rs rt<<1|1
int n,m,a[N]; struct tree{
long long l,r,w,op,k,d;
}tr[N]; void build(int rt,int l,int r){
tr[rt]={l,r,0,0,0,0};
if(l==r){
tr[rt].w=a[l];return ;
}
int mid=(l+r)>>1;
build(ls,l,mid);build(rs,mid+1,r);
} void pushdown(int rt){
if(tr[rt].op){
tr[ls].k+=tr[rt].k;
tr[ls].d+=tr[rt].d;
tr[ls].op=1;
tr[rs].k+=tr[rt].k+(tr[rs].l-tr[ls].l)*tr[rt].d;
tr[rs].d+=tr[rt].d;
tr[rs].op=1;
}
tr[rt].op=0;
tr[rt].d=tr[rt].k=0;
} void update(int rt,int cl,int cr,int k,int d){
int l=tr[rt].l,r=tr[rt].r;
if(cl<=l&&r<=cr){
tr[rt].op=1;
tr[rt].k+=k+(l-cl)*d;
tr[rt].d+=d;
return ;
}
pushdown(rt);
int mid=(l+r)>>1;
if(cl<=mid) update(ls,cl,cr,k,d);
if(cr>mid) update(rs,cl,cr,k,d);
} long long query(int rt,int p){
int l=tr[rt].l,r=tr[rt].r;
// printf("|%d %d %d %d %d\n",l,r,tr[rt].d,tr[rt].k,tr[rt].w);
if(l==r){
tr[rt].w+=tr[rt].k;
tr[rt].k=0;tr[rt].d=0;
return tr[rt].w;
}
pushdown(rt);
int mid=(l+r)>>1;
if(p<=mid) return query(ls,p);
else return query(rs,p);
} int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
build(1,1,n);
while(m--){
int t,l,r,k,d,p;
scanf("%d",&t);
if(t==1){
scanf("%d%d%d%d",&l,&r,&k,&d);
update(1,l,r,k,d);
}else{
scanf("%d",&p);
printf("%lld\n",query(1,p));
}
}
return 0;
}

不开 long long 见祖宗!

P1438 无聊的数列 题解的更多相关文章

  1. 洛谷 P1438 无聊的数列 题解

    原题链接 首先,我们考虑用差分解决问题. 用 \(x_i\) 表示原数列,\(a_i = x_i - x_{i-1}\) 那么,先普及一下差分: 如果我们只需要维护区间加值,单点求值的话,你会发现两个 ...

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

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

  3. P1438 无聊的数列

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

  4. [luogu P1438] 无聊的数列

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

  5. Luogu P1438无聊的数列

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

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

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

  7. 洛谷 P1438 无聊的数列

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

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

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

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

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

  10. P1438 无聊的数列 (线段树)

    题目链接 Solution 直接维护一个差分的线段树就好了. 其中线段树的节点代表 \(r\) 比 \(l\) 多多少. Code #include<bits/stdc++.h> #def ...

随机推荐

  1. 常用ffmpeg命令集合(收藏吧,帮你省一个录屏软件的会员费)

    录制屏幕: 全屏的话用screen-capture-recoder下载地址:https://github.com/rdp/screen-capture-recorder-to-video-window ...

  2. 服务端渲染中的数据获取:结合 useRequestHeaders 与 useFetch

    title: 服务端渲染中的数据获取:结合 useRequestHeaders 与 useFetch date: 2024/7/24 updated: 2024/7/24 author: cmdrag ...

  3. scratch少儿编程卡通三国背景72张全套素材包【免费下载】

    scratch卡通三国题材背景图片,共72张,让你轻松打造scratch三国世界! 免费下载地址:https://www.xiaohujing.com.cn 这套背景图片以卡通风格呈现,色彩鲜艳.造型 ...

  4. Windows cifs共享给linux

    Windows 搜索启用或关闭Windows功能 启用cifs 共享文件并添加普通用户 解禁guest用户和设置本地策略 右键计算机 win+r输入secpol.msc 将guest删除 修改网络访问 ...

  5. 一款基于Fluent设计风格、现代化的WPF UI控件库

    前言 今天大姚给大家分享一款基于Fluent设计风格.开源(MIT License).现代化的WPF UI控件库,它提供直观的设计.主题.导航和全新的沉浸式控件,全部都是原生且无缝地集成在一起:WPF ...

  6. Bulk RNA-seq 基本分析流程

    目的: 对illumina数据进行处理,利用 RNA-Seq 发现新的 RNA 变体和剪接位点,或量化 mRNA 以进行基因表达分析等.对两组或多组样本的转录组数据,通过差异表达分析和对所发现的差异表 ...

  7. 【Spring Data JPA】02 快速上手

    完成一个CRUD - 创建工程导入依赖坐标 - 配置Spring的配置文件 - 配置ORM的实体类,绑定映射关系 - 编写一个符合SpringDataJpa的dao接口 Maven依赖坐标 <p ...

  8. Reinforcement 代码库

    https://github.com/dragen1860?tab=repositories https://github.com/awjuliani?tab=repositories https:/ ...

  9. 东北某海滨城市的某高校的某分校区的校园网登录程序,(python3, 模拟浏览器的登入方式)

    前些年写过这个登录程序,过了几年系统有所升级,于是做了一定的修改. 新版本的校园网登录程序依然是模拟浏览器去登录校园网. Python3.7编写. #encoding:UTF-8 from urlli ...

  10. 国产显卡如何正确打开 —— Windows平台下使用驱动精灵为国产显卡更新驱动(兆芯平台)

    买了一个国产的电脑,全国产,CPU慢些也就忍了,软件兼容性差.稳定性差也忍了,大不了就用来上网看电影嘛,关键问题是这个国产显卡放电影居然有些卡,播放电影的时候存在明显的卡顿感,这简直是把国产电脑在我脑 ...