[luogu P1438] 无聊的数列
[luogu P1438] 无聊的数列
题目背景
无聊的YYB总喜欢搞出一些正常人无法搞出的东西。有一天,无聊的YYB想出了一道无聊的题:无聊的数列。。。(K峰:这题不是傻X题吗)
题目描述
维护一个数列{a[i]},支持两种操作:
1、1 L R K D:给出一个长度等于R-L+1的等差数列,首项为K,公差为D,并将它对应加到a[L]~a[R]的每一个数上。即:令a[L]=a[L]+K,a[L+1]=a[L+1]+K+D,
a[L+2]=a[L+2]+K+2D……a[R]=a[R]+K+(R-L)D。
2、2 P:询问序列的第P个数的值a[P]。
输入输出格式
输入格式:
第一行两个整数数n,m,表示数列长度和操作个数。
第二行n个整数,第i个数表示a[i](i=1,2,3…,n)。
接下来的m行,表示m个操作,有两种形式:
1 L R K D
2 P 字母意义见描述(L≤R)。
输出格式:
对于每个询问,输出答案,每个答案占一行。
输入输出样例
5 2 1 2 3 4 5 1 2 4 1 2 2 3
6
说明
数据规模:
0≤n,m≤100000
|a[i]|,|K|,|D|≤200
Hint:
有没有巧妙的做法?
纯粹是为了刷zkw线段树才看这题的。。(标签打着zkw我也没办法)
zkw是一种很棒棒的线段树,将冗长的代码(还是zkw清真)压得很短,还是非递归的,常数小,空间小,效率高!
但是。。。
这一题花了本蒟蒻两个下午+一个晚上的时间(悲剧),可能是因为我实在太菜了吧,旁边xtx一眼用bit秒掉了这题(%%%)。
好吧,我承认用了与sol里面都不同的方法(因为我要练zkw啊!!!)
因为我太菜了,不会bit,不会lazy,所以只能打打zkw了。。
我是这样想的——
由于区间修改时,直接上去用数据结构修改是一件很麻烦的事情,那怎么办?
设原数组为o[1..n],设a[1]=o[1],a[2]=o[2]-o[1]...(dalao们一定都看出来了,这是差分数组)
这样,修改就变成了:
a[l]+=k,a[l+1..r]+=d,a[r+1]-=k+(r-l)*d
但是。。仍然需要区间修改。。。怎么办?再差分!
设b[1]=a[1],b[2]=a[2]-a[1]...
这样,修改又变成了:
b[l]+=k,b[l+1]+=d,b[r]-=k+(r-l+1)*d,b[r+1]+=k+(r-l)*d(别看就几个式子,当时的我意识模糊推了好久)
显然,我们现在只需要单点修改了,是不是很高兴!!!
然而,查询怎么办?
推一推。。。
o[x]=a[1]+a[2]+...+a[x]=b[1]+b[1]+b[2]+b[1]+b[2]+b[3]+...+b[1]+b[2]+..+b[x]=x*b[1]+(x-1)*b[2]+...+1*b[x]
这怎么办?
o[x]=(x+1)*(b[1]+b[2]+..+b[x])-(1*b[1]+2*b[2]+..+x*b[x])
好像可以了。。。我们发现,我们还需要在维护一个w数组其中w[i]=i*b[i]。
然后,询问操作就变成了区间修改,或者说更简单的区间修改(前缀和)。。
code:
1 #include<bits/stdc++.h> 2 #define LL long long 3 #define id(x) (m+x-1) 4 using namespace std; 5 const int N=400005; 6 int n,m,Q; LL o[N],b[N],w[N]; 7 void B() { 8 for (int i=1; i<=n; i++) scanf("%lld",&o[i]); 9 for (m=1; m<=n+1; m<<=1) ; 10 } 11 void U(int x,LL v) { 12 for (b[id(x)]+=v,w[id(x)]+=v*x,(x+=m-1)>>=1; x; x>>=1) 13 b[x]=b[x<<1]+b[x<<1|1],w[x]=w[x<<1]+w[x<<1|1]; 14 } 15 LL A(int x) { 16 LL ret=o[x]; 17 for (int i=id(x)+1; i!=1; i>>=1) 18 if (i&1) ret+=b[i^1]*(x+1)-w[i^1]; 19 return ret; 20 } 21 int main() { 22 scanf("%d%d",&n,&Q),B(); 23 for (int i=1; i<=Q; i++) { 24 int c,l,r,k,d; scanf("%d",&c); 25 if (c&1) { 26 scanf("%d%d%d%d",&l,&r,&k,&d); 27 U(l,k),U(l+1,d-k); 28 U(r+1,(LL)(-k)-(LL)(r-l+1)*d),U(r+2,(LL)k+(LL)(r-l)*d); 29 } else scanf("%d",&k),printf("%lld\n",A(k)); 30 } 31 return 0; 32 }
View Code
然后,终于tmA掉了。。qwq
垃圾zkw,毁我青春 zkwdalao这么强,当然要%一%啦~~~
转载于:https://www.cnblogs.com/whc200305/p/7588044.html
[luogu P1438] 无聊的数列相关推荐
- [洛谷P1438] 无聊的数列
洛谷题目链接:无聊的数列 题目背景 无聊的YYB总喜欢搞出一些正常人无法搞出的东西.有一天,无聊的YYB想出了一道无聊的题:无聊的数列...(K峰:这题不是傻X题吗) 题目描述 维护一个数列{a[i] ...
- 洛谷P1438 无聊的数列
题目背景 无聊的YYB总喜欢搞出一些正常人无法搞出的东西.有一天,无聊的YYB想出了一道无聊的题:无聊的数列...(K峰:这题不是傻X题吗) 题目描述 维护一个数列{a[i]},支持两种操作: 1.1 ...
- 洛谷 P1438 无聊的数列
题目背景 无聊的YYB总喜欢搞出一些正常人无法搞出的东西.有一天,无聊的YYB想出了一道无聊的题:无聊的数列...(K峰:这题不是傻X题吗) 题目描述 维护一个数列{a[i]},支持两种操作: 1.1 ...
- BZOJ 1500 Luogu P2042 [NOI2005] 维护数列 (Splay)
BZOJ 1500 Luogu P2042 [NOI2005] 维护数列 (Splay) 手动博客搬家: 本文发表于20180825 00:34:49, 原地址https://blog.csdn.ne ...
- luogu P4108 [HEOI2015]公约数数列(分块、gcd性质)
题解链接 #include <cstdio> #include <algorithm> #include <cstring> #include <vector ...
- LUOGU1438无聊的数列
区间加等差数列单点查询 思路: 差分,通过树状数组修改,然后保存两个数组,一个存公差,一个存和 然后正常操作即可 在学校潦草写的很潦草啦 代码如下: #include<cstdio> #i ...
- Noip前的大抱佛脚----赛前任务
赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...
- 2018十二月刷题列表
Preface \(2018\)年的尾巴,不禁感慨自己这一年的蜕变只能用蜕变来形容了. 而且老叶说我们今年没的参加清北冬令营可以参加CCF在广州二中举办的冬令营,只要联赛\(390+\)就应该可以报. ...
- 线段树 by yyb
线段树 by yyb Type1 维护特殊信息 1.[洛谷1438]无聊的数列 维护一个数列,两种操作 1.给一段区间加上一个等差数列 2.单点询问值 维护等差数列 不难发现,等差数列可以写成\(ad ...
最新文章
- 【Linux学习九】负载均衡
- tomcat配置文件server.xml详解
- mysql创建只读权限用户_新品速递 | Harbor 修复权限提升漏洞,MySQL Plus 支持密码强度校验以及审计功能...
- Mobile Widget——让开发移动应用就像做网页
- 文本聚类python fcm_机器学习笔记----Fuzzy c-means(FCM)模糊聚类详解及matlab实现
- KVM 介绍(2):CPU 和内存虚拟化
- 遍历Map集合的4种常用方法
- 初中生可以学武汉北大青鸟什么专业课程?学完之后从事什么工作?
- ESP8266在arduino下开启路由转发实现wifi中继的方法小记
- 使用神经网络实现对天气的预测
- 聚合支付系统如何开发?
- 2019暑期在校培训总结
- 6.5 特殊用途语言特性
- u盘安装成功计算机里找不到文件夹,插上U盘后,显示成功安装设备驱动程序,但是磁盘里不显示优盘...
- 使用NGINX发布DEM切片
- Android(permission)常用权限
- HDU 3507 斜率优化入学习
- ESM测向误差对定位误差的影响分析
- 模拟RGB转CVBS/S-video,VGA转CVBS(AV)/S-video,MS1835
- 也说说家养猿类养成套路
热门文章
- Object.keys()的实用优化
- pdf转word需要密码怎么办?几个方法教你解决
- 安装MySQL时出现no compatible servers were found的解决方法
- 山随明月静,墨染古佛清
- Go语言的gob简单使用
- 网红带货直播,直播带货,在线教育直播,火山抖音娱乐直播中的技术分析---推流与播流
- Netmask (子网掩码 )的用途与子网络的切分
- [思维模式-14]:《复盘》-2- “知”篇 - 复盘之道
- 车辆动力学理论与应用2021.6.5
- 人生不一定有那么多重逢