洛谷链接: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(差分)的更多相关文章

  1. 洛谷5026 Lycanthropy 差分套差分

    题目链接 https://www.luogu.com.cn/problem/P5026 题意 在一个长度为m的序列中,每次给一个下标x,和一个权值v,然后从x-v*3到x-v*2单调递增,从x-v*2 ...

  2. hdu4059 The Boss on Mars(差分+容斥原理)

    题意: 求小于n (1 ≤ n ≤ 10^8)的数中,与n互质的数的四次方和. 知识点: 差分: 一阶差分: 设  则    为一阶差分. 二阶差分: n阶差分:     且可推出    性质: 1. ...

  3. 【hihocoder#1413】Rikka with String 后缀自动机 + 差分

    搞了一上午+接近一下午这个题,然后被屠了个稀烂,默默仰慕一晚上学会SAM的以及半天4道SAM的hxy大爷. 题目链接:http://hihocoder.com/problemset/problem/1 ...

  4. 差分进化算法 DE-Differential Evolution

    差分进化算法 (Differential Evolution)   Differential Evolution(DE)是由Storn等人于1995年提出的,和其它演化算法一样,DE是一种模拟生物进化 ...

  5. UVA11478 Halum [差分约束系统]

    https://vjudge.net/problem/UVA-11478 给定一个有向图,每条边都有一个权值.每次你可以选择一个结点v和一个整数d,把所有以v为终点的边的权值减小d,把所有以v为起点的 ...

  6. BZOJ 2330: [SCOI2011]糖果 [差分约束系统] 【学习笔记】

    2330: [SCOI2011]糖果 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 5395  Solved: 1750[Submit][Status ...

  7. 洛谷P3406 海底高铁[差分 贪心]

    题目背景 大东亚海底隧道连接着厦门.新北.博艾.那霸.鹿儿岛等城市,横穿东海,耗资1000亿博艾元,历时15年,于公元2058年建成.凭借该隧道,从厦门可以乘坐火车直达台湾.博艾和日本,全程只需要4个 ...

  8. Candies-POJ3159差分约束

    Time Limit: 1500MS Memory Limit: 131072K Description During the kindergarten days, flymouse was the ...

  9. PCB走线分析——直角、差分、蛇形线

    PCB直角走线的影响   布线(Layout)是PCB设计工程师最基本的工作技能之一.走线的好坏将直接影响到整个系统的性能,大多数高速的设计理论也要最终经过 Layout 得以实现并验证,由此可见,布 ...

  10. [置顶]PADS PCB功能使用技巧系列之NO.002- 如何走差分线?

    差分信号在高速电路设计中应用越来越广泛,如USB.HDMI.PCI.DDR*等,承载差分信号的差分线主要优势有:抗干扰能力强,能有效抑制EMI.时序定位精确等,对于PCB工程师来说,最关注的是如何确保 ...

随机推荐

  1. ListBox横向排布Item

    <Window x:Class="TwoColumnListBox.MainWindow" xmlns="http://schemas.microsoft.com/ ...

  2. TEA密码与逆向工程

    前置信息 TEA系列概述:TEA算法是一种分组密码算法,‌由剑桥大学计算机实验室的David Wheeler和Roger Needham于1994年发明.‌它使用64位的明文分组和128位的密钥进行加 ...

  3. MySQL的表空间释放

    概述 最近为了对 MySQL 数据库磁盘占用瘦身,对一张近100GB表的历史数据进行了 delete 删除,删除了约2/3的数据,删除后发现该表占用的空间并未减少.通过下面语句查看该表的磁盘占用情况: ...

  4. 创建Spring Boot项目时,提示 Cannot download 'https://start.spring.io'

    问题提出 在使用IDEA创建Spring Boot项目时,提示无法连接https://start.spring.io,内容如下: Cannot download 'https://start.spri ...

  5. WPF与WinForm的对比

    WPF与WinForm的对比 本文同时为b站WPF课程的笔记,相关示例代码 创建新项目 在vs2022中,这两者分别叫做WPF应用和Windows窗体应用. 渲染引擎和设计 WPF使用DirectX作 ...

  6. Linux下如何使用perf/gdb/pstack分析性能与问题排查

    本文分享自天翼云开发者社区<Linux下如何使用perf/gdb/pstack分析性能与问题排查>,作者:5****m 在Linux系统中,perf.gdb和pstack是三个常用的性能分 ...

  7. MySQL 字符集、排序规则与查询关系详解

    MySQL 查询是否区分大小写及重音敏感,取决于创建时指定的字符集(character set)和排序规则(collation). (1)字符集(Character Set):规定可存储的字符,如 u ...

  8. npm 开发常用包

    { "name": "tlzyy_web", "version": "1.0.0", "description ...

  9. RESTful API 设计原则深度解析

    在 Web 服务架构中,RESTful API作为一种轻量级.可扩展的接口设计风格,通过 HTTP 协议实现资源的标准化访问.本文从核心原则.URL 设计.HTTP 方法应用.状态管理及面试高频问题五 ...

  10. 使用three.js,实现微信3D小游戏系列教程,框架篇(一)

    引言 在三维图形和游戏开发领域,three.js 作为一个基于 WebGL 的 JavaScript 库,提供了强大的功能来创建和显示动画化的 3D 计算机图形.它使得开发者能够轻松地在网页上构建复杂 ...