习题 8-16 弱键(Weak Key,ACM/ICPC Seoul 2004,UVa1618)

2024-04-13 02:58

本文主要是介绍习题 8-16 弱键(Weak Key,ACM/ICPC Seoul 2004,UVa1618),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原题链接:https://vjudge.net/problem/UVA-1618
分类:数据结构
备注:ST表

要求1<=p<q<r<s<=k,已知每个数字都不同,可以写一个位置数组pos[],每次枚举p和s,然后找[p,s]中最大值tmax和最小值tmin,至于为什么不是[p+1,s-1],是因为要确保找到的tmax比max{Np,Ns}大,且tmin比min{Np,Ns}小。
情况①:Ns<Np,要构造Nq<Ns<Np<Nr。如果pos[tmin]<pos[tmax],则显然成立。
情况②:Ns>Np,要构造Nq>Ns>Np>Nr。如果pos[tmin]>pos[tmax],则显然成立。
区间从[p,p+3]开始扩展,会发现不会缺漏满足条件的情况。

#include<bits/stdc++.h>
using namespace std;
const int maxn=5000+5;
int t,n,a[maxn],pos[maxn*20];
int Min[maxn][20],Max[maxn][20];
inline void init(int n){for(int i=1;i<=n;i++)Min[i][0]=Max[i][0]=a[i];for(int j=1;j<=20;j++)for(int i=1;i+(1<<j)-1<=n;i++)Min[i][j]=min(Min[i][j-1],Min[i+(1<<(j-1))][j-1]);for(int j=1;j<=20;j++)for(int i=1;i+(1<<j)-1<=n;i++)Max[i][j]=max(Max[i][j-1],Max[i+(1<<(j-1))][j-1]);    
}
inline int query_min(int l,int r){int k=log2(r-l+1);return min(Min[l][k],Min[r-(1<<k)+1][k]);
}
inline int query_max(int l,int r){int k=log2(r-l+1);return max(Max[l][k],Max[r-(1<<k)+1][k]);
}
bool check(){init(n);for(int p=1;p<=n;p++){for(int s=p+3;s<=n;s++){int tmin=query_min(p,s);int tmax=query_max(p,s);if(a[p]<a[s]&&pos[tmax]<pos[tmin])return true;if(a[p]>a[s]&&pos[tmax]>pos[tmin])return true;}}return false;
}
int main(void){//freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);scanf("%d",&t);while(t--){scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&a[i]);pos[a[i]]=i;}if(check())printf("YES\n");else printf("NO\n");}return 0;
}

这篇关于习题 8-16 弱键(Weak Key,ACM/ICPC Seoul 2004,UVa1618)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/898962

相关文章

java中判断json key是否存在的几种方法

《java中判断jsonkey是否存在的几种方法》在使用Java处理JSON数据时,如何判断某一个key是否存在?本文就来介绍三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目http://www.chinasem.cn录第一种方法是使用 jsONObject 的 has 方法

Redis高性能Key-Value存储与缓存利器常见解决方案

《Redis高性能Key-Value存储与缓存利器常见解决方案》Redis是高性能内存Key-Value存储系统,支持丰富数据类型与持久化方案(RDB/AOF),本文给大家介绍Redis高性能Key-... 目录Redis:高性能Key-Value存储与缓存利器什么是Redis?为什么选择Redis?Red

MySQL中On duplicate key update的实现示例

《MySQL中Onduplicatekeyupdate的实现示例》ONDUPLICATEKEYUPDATE是一种MySQL的语法,它在插入新数据时,如果遇到唯一键冲突,则会执行更新操作,而不是抛... 目录1/ ON DUPLICATE KEY UPDATE的简介2/ ON DUPLICATE KEY UP

shell脚本批量导出redis key-value方式

《shell脚本批量导出rediskey-value方式》为避免keys全量扫描导致Redis卡顿,可先通过dump.rdb备份文件在本地恢复,再使用scan命令渐进导出key-value,通过CN... 目录1 背景2 详细步骤2.1 本地docker启动Redis2.2 shell批量导出脚本3 附录总

SQL 外键Foreign Key全解析

《SQL外键ForeignKey全解析》外键是数据库表中的一列(或一组列),用于​​建立两个表之间的关联关系​​,外键的值必须匹配另一个表的主键(PrimaryKey)或唯一约束(UniqueCo... 目录1. 什么是外键?​​ ​​​​2. 外键的语法​​​​3. 外键的约束行为​​​​4. 多列外键​

浅谈Redis Key 命名规范文档

《浅谈RedisKey命名规范文档》本文介绍了Redis键名命名规范,包括命名格式、具体规范、数据类型扩展命名、时间敏感型键名、规范总结以及实际应用示例,感兴趣的可以了解一下... 目录1. 命名格式格式模板:示例:2. 具体规范2.1 小写命名2.2 使用冒号分隔层级2.3 标识符命名3. 数据类型扩展命

Redis 热 key 和大 key 问题小结

《Redis热key和大key问题小结》:本文主要介绍Redis热key和大key问题小结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、什么是 Redis 热 key?热 key(Hot Key)定义: 热 key 常见表现:热 key 的风险:二、

redis过期key的删除策略介绍

《redis过期key的删除策略介绍》:本文主要介绍redis过期key的删除策略,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录第一种策略:被动删除第二种策略:定期删除第三种策略:强制删除关于big key的清理UNLINK命令FLUSHALL/FLUSHDB命

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

MySQL中Next-Key Lock底层原理实现

《MySQL中Next-KeyLock底层原理实现》Next-KeyLock是MySQLInnoDB存储引擎中的一种锁机制,结合记录锁和间隙锁,用于高效并发控制并避免幻读,本文主要介绍了MySQL中... 目录一、Next-Key Lock 的定义与作用二、底层原理三、源代码解析四、总结Next-Key L