题解

首先我们要对一个地点能否到达建立认知:一个地点能到达不仅仅是能从它的上一个点或上上个点跳到,而是能从第一个点开始跳一路跳到。就好比说,咱吃了6个包子吃饱了,但咱不能只付第6个包子的钱。

方法一:并查集

遍历整个序列,若一个点能由上一个点或上上个点跳到,则把出发点和目标点丢入同一个并查集。最后检查第一个点和最后一个点是否在同一个集合里。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=100005;
int t;
int fa[N];
int h[N];
template <typename T>inline void re(T &x) {
x=0;
int f=1;
char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=-f;
for(;isdigit(c);c=getchar()) x=(x<<3)+(x<<1)+(c^48);
x*=f;
return;
}
template <typename T>void wr(T x) {
if(x<0) putchar('-'),x=-x;
if(x>9) wr(x/10);
putchar(x%10^'0');
return;
}
int my_abs(int a,int b)
{
if(a>=b) return a-b;
else return b-a;
}
int get(int x)
{
if(fa[x]!=x) fa[x]=get(fa[x]);
return fa[x];
}
void merge(int r1,int r2)
{
fa[r2]=r1;
}
int main()
{
freopen("n.in","r",stdin);
freopen("n.out","w",stdout);
re(t);
while(t--)
{
int n,d1,d2;
memset(h,0,sizeof(h));
re(n);re(d1);re(d2);
for(int i=1;i<=n;i++)
{
re(h[i]);
fa[i]=i;
}
for(int i=1;i<=n;i++)
{
if(i>=2&&my_abs(h[i],h[i-1])<=d1)
{
int r1=get(i);
int r2=get(i-1);
if(r1!=r2) merge(r1,r2);
}
if(i>=3&&h[i-2]>h[i-1]&&h[i-1]<h[i]&&my_abs(h[i],h[i-2])<=d2)
{
int r1=get(i);
int r2=get(i-2);
if(r1!=r2) merge(r1,r2);
}
}
if(get(1)==get(n)) puts("Yes");
else puts("No");
}
return 0;
}

方法二:标记法

给每个能被跳到的点打上标记,而每一个能被跳到的点不仅要满足存在上个点或上上个点能跳到这个点,还要满足起跳点也能被跳到。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[100001];
bool pd[100001];
template <typename T>inline void re(T &x) {
x=0;
int f=1;
char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=-f;
for(;isdigit(c);c=getchar()) x=(x<<3)+(x<<1)+(c^48);
x*=f;
return;
}
int main()
{
freopen("n.in","r",stdin);
freopen("n.out","w",stdout);
int t,n,d1,d2;
re(t);
for(int x=1;x<=t;x++)
{
n=0,d1=0,d2=0;
re(n);
re(d1);
re(d2);
memset(pd,0,sizeof(pd));
pd[1]=1;
re(a[1]);
for(int i=2;i<=n;i++)
{
re(a[i]);
if(abs(a[i]-a[i-1])<=d1&&pd[i-1])
{
pd[i]=1;
continue;
}
if(abs(a[i]-a[i-2])<=d2&&pd[i-2]&&a[i]>a[i-1]&&a[i-1]<a[i-2])
{
pd[i]=1;
continue;
}
}
if(pd[n]) printf("Yes\n");
else printf("No\n");
}
return 0;
}

n维偏序 方法记录的更多相关文章

  1. [The Preliminary Contest for ICPC Asia Nanjing 2019] A-The beautiful values of the palace(二维偏序+思维)

    >传送门< 前言 这题比赛的时候觉得能做,硬是怼了一个半小时,最后还是放弃了.开始想到用二维前缀和,结果$n\leq 10^{6}$时间和空间上都爆了,没有办法.赛后看题解用树状数组,一看 ...

  2. N维偏序:cdq分治

    cdq(陈丹琦)分治,是一种类似二分的算法.基本思想同分治: 递归,把大问题划分成若干个结构相同的子问题,直到(L==R): 处理左区间[L,mid]对右区间[mid+1,R]的影响: 合并. 它可以 ...

  3. 【二维偏序】【树状数组】【权值分块】【分块】poj2352 Stars

    经典问题:二维偏序.给定平面中的n个点,求每个点左下方的点的个数. 因为 所有点已经以y为第一关键字,x为第二关键字排好序,所以我们按读入顺序处理,仅仅需要计算x坐标小于<=某个点的点有多少个就 ...

  4. 树状数组 二维偏序【洛谷P3431】 [POI2005]AUT-The Bus

    P3431 [POI2005]AUT-The Bus Byte City 的街道形成了一个标准的棋盘网络 – 他们要么是北南走向要么就是西东走向. 北南走向的路口从 1 到 n编号, 西东走向的路从1 ...

  5. 『cdq分治和多维偏序问题』

    更新了三维偏序问题的拓展 cdq分治 \(cdq\)分治是一种由\(IOI\ Au\)选手\(cdq\)提出的离线分治算法,又称基于时间的分治算法. 二维偏序问题 这是\(cdq\)分治最早提出的时候 ...

  6. 洛谷 P1972 [SDOI2009]HH的项链-二维偏序+树状数组+读入挂(离线处理,思维,直接1~n一边插入一边查询),hahahahahahaha~

    P1972 [SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含 ...

  7. 计蒜客 41391.query-二维偏序+树状数组(预处理出来满足情况的gcd) (The Preliminary Contest for ICPC Asia Xuzhou 2019 I.) 2019年徐州网络赛)

    query Given a permutation pp of length nn, you are asked to answer mm queries, each query can be rep ...

  8. EF里查看/修改实体的当前值、原始值和数据库值以及重写SaveChanges方法记录实体状态

    本文目录 查看实体当前.原始和数据库值:DbEntityEntry 查看实体的某个属性值:GetValue<TValue>方法 拷贝DbPropertyValues到实体:ToObject ...

  9. 64位 SQL Server2008链接访问Oracle 过程汇总解决方法记录

    64位 SQL Server2008链接访问Oracle 过程汇总解决方法记录 经过几天不停的网上找资料,实验,终于联通了. 环境:系统:win 2008 ,SqlServer2008 R2, 连接O ...

随机推荐

  1. 安卓手机如何无线连接adb?

    一般情况,大家adb调试手机,都是通过数据线的,但这样又是不太方便,所以我们可以通过WLAN来adb. 我的是华为手机,进入:设置-关于手机,连续点击版本号,唤出开发者模式.然后去返回设置-系统和更新 ...

  2. 利用DockerHub在Centos7.7环境下部署Nginx反向代理Gunicorn+Flask独立架构

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_165 上一篇文章:Docker在手,天下我有,在Win10系统下利用Docker部署Gunicorn+Flask打造独立镜像,是在 ...

  3. 日志(logging模块)

    1. 为什么要使用日志(作用) 在学习过程中,写一个小程序或小demo时,遇到程序出错时,我们一般会将一些信息打印到控制台进行查看,方便排查错误.这种方法在较小的程序中很实用,但是当你的程序变大,或是 ...

  4. 三菱模拟量输入模块FX3U-4AD与FX3U-4AD-ADP的区别

    三菱PLC模块 FX3U-4AD与FX3U-4AD-ADP同为三菱FX3U系列PLC的模拟量4通道电压/电流输入模块,其功能作用相同,在三菱FX3U系列PLC上使用起来也并无不同之处. 1.三菱PLC ...

  5. Win10 x64 安装Eplan P8 2.7 小结

    一.软件安装准备及过程 为免版权纠纷,此处不提供下载链接,请自行查找资源. 1.打开"Electric P8 2.7.3.11418"目录,以管理员身份运行"setup. ...

  6. vue中axios配置代理的俩种方式及优缺点

    概述:Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中 当我们使用vue向服务器发送AJAX请求时,我们会遇到跨域问题,一般跨域的解决方案有俩种,一种是官 ...

  7. NOI P序列题 (二分)

    题面 题解 --WQS二分 想到这个这题就完了. 赛时没想到这个你就完了. 时间复杂度 O ( n log ⁡ a ) O(n\log a) O(nloga) 不难发现这题有凸性,可以WQS二分. 我 ...

  8. Windows API 学习

    Windows API学习 以下都是我个人一些理解,笔者不太了解windows开发,如有错误请告知,非常感谢,一切以microsoft官方文档为准. https://docs.microsoft.co ...

  9. CodeForces - 1629C

    Problem - 1629C - Codeforces 题意: 一个序列,每次可以从开头选择一个长度为K的序列,然后得到这个序列的MEX(最小的未出现的数),问最后可以求得的字典大小最大的序列是多少 ...

  10. HPC+时代,携手亚马逊云科技,共赴数字化升级的星辰大海!

    高性能计算(HPC)和云计算曾是两个"平行世界",各自演绎着精彩,却鲜有交集. 传统上,HPC主要应用于大规模计算,如天气预报.石油勘探.药物研发等.这些任务通常借助超级计算机或计 ...