习题 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

相关文章

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

深入理解Redis大key的危害及解决方案

《深入理解Redis大key的危害及解决方案》本文主要介绍了深入理解Redis大key的危害及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、背景二、什么是大key三、大key评价标准四、大key 产生的原因与场景五、大key影响与危

python 字典d[k]中key不存在的解决方案

《python字典d[k]中key不存在的解决方案》本文主要介绍了在Python中处理字典键不存在时获取默认值的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录defaultdict:处理找不到的键的一个选择特殊方法__missing__有时候为了方便起见,

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

Regionals 2004 Asia - Beijing Argus 小根堆

点击打开链接 小根堆 import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.math.BigInteger;import java.util.StringTokeni

git ssh key相关

step1、进入.ssh文件夹   (windows下 下载git客户端)   cd ~/.ssh(windows mkdir ~/.ssh) step2、配置name和email git config --global user.name "你的名称"git config --global user.email "你的邮箱" step3、生成key ssh-keygen