洛谷5026 Lycanthropy 差分套差分
题目链接
https://www.luogu.com.cn/problem/P5026
题意
在一个长度为m的序列中,每次给一个下标x,和一个权值v,然后从x-v*3到x-v*2单调递增,从x-v*2到x单调递减,从x到x+v*2再次递增,然后x+v*2到x+v*3递减,递增递减都是斜率绝对值为1的直线。
分析
刚学了差分趁现在还没忘赶紧把自己想的写下来
看到这个其实很容易想到,对于每次修改,将其分为四个区间进行修改,由于它是单调递增的,所以让每个点对应的差分数组加一就行,这样就用到了线段树维护差分数组,但这样还是效率不是很高,我们仍然可以优化,对于同一区间内的每个点与前一个点的差值也是一定的,所以只要修改区间的两端就可以使整个区间内的差值改变,这样两个点的差值就可以构成一个差分数组,然后通过对这个差分数组求前缀和,可以得到每个点与前一个点的差值,再然后更新每个点值的前缀和数组,然后就可以得到这个点的值,输出就行,也就是rt,差分套差分。
其实这个挺简单的,仔细想想也 很容易 困难想得出来
最后是关于负数的问题,数组下标是不能为负数的,会RE,某大佬的做法是将原点左移,我试了试也是可以的,后来在洛谷上学习了一篇题解的做法,觉得这个很不错,直接用一个指针来代替数组,其实数组的实质也是指针,比如数组aa[10]->从指针aa开始往后数10个,所以只要让一个指针指向数组中间就能实现负下标的数组,感觉挺实用 好玩。
#include<cstdio>
const int N=2e6;//记得开大点,不然会被一些极大的数据RE掉
int aa[N<<],bb[N<<];
int main(){
int *a=aa+N,*b=bb+N;
int m,n;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
int v,x;
scanf("%d%d",&v,&x);
a[x-v*+]++;
a[x-v*+]-=;
a[x+]+=;
a[x+v*+]-=;
a[x+v*+]++;
}
for(int i=-;i<=+m;i++)
a[i]+=a[i-],b[i]+=b[i-]+a[i];
for(int i=;i<=m;i++)
printf("%d ",b[i]);
return ;
}
小正方形的每个朋友有一个体积数值 vv,当体积为 vv 的一个朋友跳入水中,我们设入水点为 ii,将会导致 i - v + 1i−v+1 到 ii 的水位依次降低 1,2,\cdots,v1,2,⋯,v
同样地,第 ii 到 i + v - 1i+v−1 的水位会依次降低 v,v - 1,\cdots,1v,v−1,⋯,1.
相对应地,i - vi−v 的水位不变, i - v - 1i−v−1 到 i - 2 * vi−2∗v 水位依次增加 1,2,\cdots,v1,2,⋯,v, i - 2 * vi−2∗v 到 i - 3 * v + 1i−3∗v+1 水位依次增加 v,v - 1,\cdots,1v,v−1,⋯,1
同样,i + vi+v 水位不变,i + v + 1i+v+1 到 i + 2 * vi+2∗v 水位增加 1,2,\cdots,v1,2,⋯,v,i + 2 * vi+2∗v 到 i + 3 * v - 1i+3∗v−1 水位依次增加 v,v - 1,\cdots,1v,v−1,⋯,1
洛谷5026 Lycanthropy 差分套差分的更多相关文章
- [洛谷P3948]数据结构 题解(差分)
[洛谷P3948]数据结构 Description 最开始的数组每个元素都是0 给出n,opt ,min,max,mod 在int范围内 A: L ,R ,X 表示把[l,R] 这个区间加上X(数组的 ...
- 洛谷P3275 [SCOI2011]糖果(差分约束,最长路,Tarjan,拓扑排序)
洛谷题目传送门 差分约束模板题,等于双向连0边,小于等于单向连0边,小于单向连1边,我太蒻了,总喜欢正边权跑最长路...... 看遍了讨论版,我是真的不敢再入复杂度有点超级伪的SPFA的坑了 为了保证 ...
- 洛谷P3406 海底高铁[差分 贪心]
题目背景 大东亚海底隧道连接着厦门.新北.博艾.那霸.鹿儿岛等城市,横穿东海,耗资1000亿博艾元,历时15年,于公元2058年建成.凭借该隧道,从厦门可以乘坐火车直达台湾.博艾和日本,全程只需要4个 ...
- 洛谷P3246 [HNOI2016]序列(离线 差分 树状数组)
题意 题目链接 Sol 好像搞出了一个和题解不一样的做法(然而我考场上没写出来还是爆零0) 一个很显然的思路是考虑每个最小值的贡献. 预处理出每个数左边第一个比他小的数,右边第一个比他大的数. 那么\ ...
- 【洛谷】【lca+树上差分】P3258 [JLOI2014]松鼠的新家
[题目描述:] 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n(2 ≤ n ≤ 300000)个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真 ...
- 洛谷P1600 天天爱跑步(差分 LCA 桶)
题意 题目链接 Sol 一步一步的来考虑 \(25 \%\):直接\(O(nm)\)的暴力 链的情况:维护两个差分数组,分别表示从左向右和从右向左的贡献, \(S_i = 1\):统计每个点的子树内有 ...
- 【洛谷 P1645】 序列 (差分约束)
题目链接 差分约束. 设\(s[i]\)表示前\(i\)个位置有多少个数,那么对于一个限制条件\((L,R,C)\),显然有 \[s[R]-s[L-1]>=C\] 于是连一条\(L-1\)到\( ...
- 洛谷P2680 运输计划——树上差分
题目:https://www.luogu.org/problemnew/show/P2680 久违地1A了好高兴啊! 首先,要最大值最小,很容易想到二分: 判断当前的 mid 是否可行,需要看看有没有 ...
- 洛谷 P5019 铺设道路(差分)
嗯... 题目链接:https://www.luogu.org/problem/P5019 首先简化一下题意: 给定一个长为N的数组,每次操作可以选择一个区间减去1,问最少多少次操作可以将数组中的数全 ...
随机推荐
- 压力测试(四)-Mysql数据库压测实操
1.Jmeter压测实战之JDBC request压测Mysql讲解 简介:讲解jdbc压测mysql相关准备工作,jar包添加,配置讲解 1.Thread Group -> add -> ...
- 基于activity的强大java工作流引擎,可视化开发工作流
我们先来看看工作流引擎和Activity? 工作流引擎 所谓工作流引擎是指workflow作为应用系统的一部分,并为之提供对各应用系统有决定作用的根据角色.分工和条件的不同决定信息传递路由.内容等级等 ...
- 关于地址栏url的一些小结
1.获取整个地址栏地址 //获取整个地址栏地址 var href = window.location.href; console.log(href); 以上代码就是获取整个url地址 2.获取url协 ...
- disruptor 多生产者多消费者实战 四
一.创建event类 Order public class Order { private String id; private String name; private double price; ...
- npm install、npm install --save与npm install --save-dev、npm install -g区别
npm install X: 会把X包安装到node_modules目录中 不会修改package.json 之后运行npm install命令时,不会自动安装X npm install X –sav ...
- vue安卓4.4.2页面打不开的坑
项目上线两三天,有保障说安卓下面页面打不开,所以查了下具体原因,系统版本过低,安卓4.4.2,然后发现本地没有babel-polyfill的包,具体解决方案如下: 1,npm 安装 npm insta ...
- JavaScript对象(三)
序列化对象: 对象序列化:对象的状态转化为字符串,也可以将字符串还原为对象.方法:JSON.stringify(),用来序列化,JSON.parse(),用来还原对象. JSON(JavaScript ...
- Notepad++远程连接Linux
为方便编辑Linux上的文件,我们可以用Notepad++的NppFTP插件 工具:Notepad++.CentOS 1.通过ifconfig命令找到主机ip 2.打开Notepad++插件NppFT ...
- 误用git reset -hard 的检讨书
误用git reset -hard 的检讨书 消失的代码们: 我知道你们可能看不到了,但是我还是需要自我反省自己,因为自己的误操作,导致了你们的消失. 事情的始末 夜阑人静,周围除了少年敲击键盘的声音 ...
- Python xlsxwriter模块
1.简介: xlsxWriter支持多种excle功能:与excel完美兼容:写大文件,速度快且只占用很小的内存空间不支持读或者改现有的excel文件 2.安装: pip install xlsxwr ...