P5026 Lycanthropy(差分)
洛谷链接:https://www.luogu.com.cn/problem/P5026
P5026 Lycanthropy
题目背景
小正方形亲眼看见了自己昔日的朋友被卷进了黑暗的深渊,然而它无力阻止……
现在它的朋友已经向它发起了攻击,因此小正方形不得不抵抗。
题目描述
我们把山顶上的湖泊看作一条长度为 \(m\) 的直线,一开始水深都在水平线上,我们视作此时的水深为 '0'
接下来,在一瞬间,小正方形的"朋友"们跳起并扎入水中,导致在入水点的水降低而远离入水点的水升高,注意两个 "朋友" 可能在同一地点入水。
小正方形的每个朋友有一个体积数值 \(v\),当体积为 \(v\) 的一个朋友跳入水中,我们设入水点为 \(i\),将会导致 \(i - v + 1\) 到 \(i\) 的水位依次降低 \(1,2,\cdots,v\)
同样地,第 \(i\) 到 \(i + v - 1\) 的水位会依次降低 \(v,v - 1,\cdots,1\).
相对应地,\(i - v\) 的水位不变, \(i - v - 1\) 到 \(i - 2 * v\) 水位依次增加 \(1,2,\cdots,v\), \(i - 2 * v\) 到 \(i - 3 * v + 1\) 水位依次增加 \(v,v - 1,\cdots,1\)
同样,\(i + v\) 水位不变,\(i + v + 1\) 到 \(i + 2 * v\) 水位增加 \(1,2,\cdots,v\),\(i + 2 * v\) 到 \(i + 3 * v - 1\) 水位依次增加 \(v,v - 1,\cdots,1\)
现在小正方形想要穿过这个湖,他想要知道在这 \(n\) 个"朋友"跳入水中后湖上每个节点的水位,你能帮帮它吗?
输入格式
第一行为两个整数 \(n\),\(m\),表示"朋友"的数目与湖泊的宽度。
接下来 \(n\) 行,一行两个整数 \(v,x\),表示第 \(i + 1\) 个朋友的体积与入水点。
输出格式
一行 \(m\) 个整数,第 \(i\) 个整数表示 \(i\) 号位的水深。
输入输出样例 #1
输入 #1
1 10
1 5
输出 #1
0 0 1 0 -1 0 1 0 0 0
输入输出样例 #2
输入 #2
2 10
2 6
3 1
输出 #2
-2 0 0 0 0 0 2 2 2 2
说明/提示
对于 \(30\%\) 的数据,\(n <= 50,m <= 500\)
对于 \(70\%\) 的数据,\(n <= 10^5,m <= 10^5\)
对于 \(100\%\) 的数据,\(n <= 10^6,m <= 10^6,1 <= v <= 10000,1 <= x <= m\)
思路:
这道题的难度在于处理好边界条件,我们可以通过将起始位置平移到一个较大数字,保证下标不会越界到负数去,我们可以通过观察数组的数据量来定S,具体看题解,其实将题目提到的变化转换成四个等差差分数组来实现。
题解:
#include <bits/stdc++.h>
using namespace std;
const int N=5e6+10;
const int S = 3e6;
typedef long long ll;
int n,m;
int t=1;
int v,x;
int arr[N];
void st(int l,int r,int s,int e,int d)
{
arr[l+S]+=s;
arr[l+S+1]+=d-s;
arr[r+S+1]-=d+e;
arr[r+S+2]+=e;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
// cin>>t;
cin>>n>>m;
while(n--)
{
cin>>v>>x;
// x-3v - x-2v
st(x-3*v+1,x-2*v,1,v,1);
// x-2v - x
st(x-2*v+1,x,v-1,-v,-1);
// x - x+2v
st(x+1,x+2*v,-v+1,v,1);
// x - x+3v
st(x+2*v+1,x+3*v-1,v-1,1,-1);
}
ll sum=0;
for(int i=1;i<=m+S;i++)
{
arr[i]+=arr[i-1];
}
for(int i=1;i<=m+S;i++)
{
arr[i]+=arr[i-1];
}
for(int i=1;i<=m;i++)cout<<arr[i+S]<<' ';
cout<<endl;
return 0;
}
P5026 Lycanthropy(差分)的更多相关文章
- 洛谷5026 Lycanthropy 差分套差分
题目链接 https://www.luogu.com.cn/problem/P5026 题意 在一个长度为m的序列中,每次给一个下标x,和一个权值v,然后从x-v*3到x-v*2单调递增,从x-v*2 ...
- hdu4059 The Boss on Mars(差分+容斥原理)
题意: 求小于n (1 ≤ n ≤ 10^8)的数中,与n互质的数的四次方和. 知识点: 差分: 一阶差分: 设 则 为一阶差分. 二阶差分: n阶差分: 且可推出 性质: 1. ...
- 【hihocoder#1413】Rikka with String 后缀自动机 + 差分
搞了一上午+接近一下午这个题,然后被屠了个稀烂,默默仰慕一晚上学会SAM的以及半天4道SAM的hxy大爷. 题目链接:http://hihocoder.com/problemset/problem/1 ...
- 差分进化算法 DE-Differential Evolution
差分进化算法 (Differential Evolution) Differential Evolution(DE)是由Storn等人于1995年提出的,和其它演化算法一样,DE是一种模拟生物进化 ...
- UVA11478 Halum [差分约束系统]
https://vjudge.net/problem/UVA-11478 给定一个有向图,每条边都有一个权值.每次你可以选择一个结点v和一个整数d,把所有以v为终点的边的权值减小d,把所有以v为起点的 ...
- BZOJ 2330: [SCOI2011]糖果 [差分约束系统] 【学习笔记】
2330: [SCOI2011]糖果 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 5395 Solved: 1750[Submit][Status ...
- 洛谷P3406 海底高铁[差分 贪心]
题目背景 大东亚海底隧道连接着厦门.新北.博艾.那霸.鹿儿岛等城市,横穿东海,耗资1000亿博艾元,历时15年,于公元2058年建成.凭借该隧道,从厦门可以乘坐火车直达台湾.博艾和日本,全程只需要4个 ...
- Candies-POJ3159差分约束
Time Limit: 1500MS Memory Limit: 131072K Description During the kindergarten days, flymouse was the ...
- PCB走线分析——直角、差分、蛇形线
PCB直角走线的影响 布线(Layout)是PCB设计工程师最基本的工作技能之一.走线的好坏将直接影响到整个系统的性能,大多数高速的设计理论也要最终经过 Layout 得以实现并验证,由此可见,布 ...
- [置顶]PADS PCB功能使用技巧系列之NO.002- 如何走差分线?
差分信号在高速电路设计中应用越来越广泛,如USB.HDMI.PCI.DDR*等,承载差分信号的差分线主要优势有:抗干扰能力强,能有效抑制EMI.时序定位精确等,对于PCB工程师来说,最关注的是如何确保 ...
随机推荐
- ListBox横向排布Item
<Window x:Class="TwoColumnListBox.MainWindow" xmlns="http://schemas.microsoft.com/ ...
- TEA密码与逆向工程
前置信息 TEA系列概述:TEA算法是一种分组密码算法,由剑桥大学计算机实验室的David Wheeler和Roger Needham于1994年发明.它使用64位的明文分组和128位的密钥进行加 ...
- MySQL的表空间释放
概述 最近为了对 MySQL 数据库磁盘占用瘦身,对一张近100GB表的历史数据进行了 delete 删除,删除了约2/3的数据,删除后发现该表占用的空间并未减少.通过下面语句查看该表的磁盘占用情况: ...
- 创建Spring Boot项目时,提示 Cannot download 'https://start.spring.io'
问题提出 在使用IDEA创建Spring Boot项目时,提示无法连接https://start.spring.io,内容如下: Cannot download 'https://start.spri ...
- WPF与WinForm的对比
WPF与WinForm的对比 本文同时为b站WPF课程的笔记,相关示例代码 创建新项目 在vs2022中,这两者分别叫做WPF应用和Windows窗体应用. 渲染引擎和设计 WPF使用DirectX作 ...
- Linux下如何使用perf/gdb/pstack分析性能与问题排查
本文分享自天翼云开发者社区<Linux下如何使用perf/gdb/pstack分析性能与问题排查>,作者:5****m 在Linux系统中,perf.gdb和pstack是三个常用的性能分 ...
- MySQL 字符集、排序规则与查询关系详解
MySQL 查询是否区分大小写及重音敏感,取决于创建时指定的字符集(character set)和排序规则(collation). (1)字符集(Character Set):规定可存储的字符,如 u ...
- npm 开发常用包
{ "name": "tlzyy_web", "version": "1.0.0", "description ...
- RESTful API 设计原则深度解析
在 Web 服务架构中,RESTful API作为一种轻量级.可扩展的接口设计风格,通过 HTTP 协议实现资源的标准化访问.本文从核心原则.URL 设计.HTTP 方法应用.状态管理及面试高频问题五 ...
- 使用three.js,实现微信3D小游戏系列教程,框架篇(一)
引言 在三维图形和游戏开发领域,three.js 作为一个基于 WebGL 的 JavaScript 库,提供了强大的功能来创建和显示动画化的 3D 计算机图形.它使得开发者能够轻松地在网页上构建复杂 ...