洛谷链接: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. Windows下使用Qt复制文件夹(xcopy,非QFile)

    Windows下使用Qt复制文件夹(xcopy,非QFile) .h文件 #ifndef CXCOPY_H #define CXCOPY_H #include <QWidget> #inc ...

  2. L1-2、Prompt 的基础结构拆解

    --写得"清楚",AI才"聪明" Prompt 不只是"让 AI 帮我做事"的指令,它是一种对任务的精准建模,写得越准.越具体,AI 表现就 ...

  3. Go 进阶训练营 Week02: error 错误处理

    Error vs Exception Error: Go error 就是普通的一个接口,普通的值.Errors are values type error interface { Error() s ...

  4. SAP采购订单屏幕控制

    这里看交货计划的屏幕控制:交货计划增强,不可编辑 采购订单的程序是用类+屏幕写的. 所以直接看采购订单的程序:MEGUI 找到我们需要增强的屏幕,屏幕号1320 对应的类对象. BUILD_DYNPR ...

  5. DTMO 直播预告|Taier 的 Web 前端架构解析

    原文链接:DTMO 直播预告|Taier 的 Web 前端架构解析 一.直播介绍 上两期,我们为大家分享了 Taier 入门及控制台的介绍,本期我们为大家分享 Taier 的 Web 前端架构介绍. ...

  6. HyperWorks实体网格划分

    实体网格剖分 在 HyperMesh 中,使用 Solid Map 功能进行实体网格剖分.该面板如下图所示: 图 4-4 Solid Map 面板 Ø 通过 Solid Map Panel 进行实体网 ...

  7. HRC 003 T3 置换

    题目链接 HRC 是啥 HZOI Regular Contest 前置知识 置换 轮换 \(60\space\text{pts}\) 解法 就像对于一个数,我们经常从素因子之积的角度看待它一样,在这道 ...

  8. python字典批量删除多个键值对(连续)

    搜不到字典批量删除多个键值对的方法,换了个搜索姿势,批量取N个元素,那么组合一下,就出来了! 新建一个字典dict:  目标:去掉key为c,d,e的键值对. 最常见的就是直接删除,但是这样有个弊端, ...

  9. C# 中使用线程、Task和 ThreadPool 的并发性

    C# 中的并发性涉及使用线程和任务等功能在程序中同时执行任务.这就像让多个工人同时完成不同的工作.这在现代应用程序中至关重要,因为它使它们更快.响应更迅速.并发性可确保我们的应用程序平稳运行,快速响应 ...

  10. 前端开发系列131-进阶篇之Promise源码实现

    本文介绍参考[PromiseA+]规范来实现一个符合规范的Promise库. 上面是ES6+实现的Promise核心方法,其整体结构也可以通过下面的打印查看 /* 01-打印Promise类的内容(静 ...