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

相关文章

ITMS-90339: Deprecated Info.plist Key

The Info.plist contains a key 'UIApplicationExitsOnSuspend' in bundle 在info.plist中找到这个key——UIApplicationExitsOnSuspend,然后删掉就可以了。确保没问题的话也跑一下看是否可以能在后台运行。 需要先转换一下,才能找到对应的key

16.Spring前世今生与Spring编程思想

1.1.课程目标 1、通过对本章内容的学习,可以掌握Spring的基本架构及各子模块之间的依赖关系。 2、 了解Spring的发展历史,启发思维。 3、 对 Spring形成一个整体的认识,为之后的深入学习做铺垫。 4、 通过对本章内容的学习,可以了解Spring版本升级的规律,从而应用到自己的系统升级版本命名。 5、Spring编程思想总结。 1.2.内容定位 Spring使用经验

《学习OpenCV》课后习题解答7

题目:(P105) 创建一个结构,结构中包含一个整数,一个CvPoint和一个 CvRect;称结构体为“my_struct”。 a. 写两个函数:void Write_my_strct(CvFileStorage* fs, const char * name, my_struct* ms) 和 void read_my_struct(CvFileStorage* fs, CvFileNode

《学习OpenCV》课后习题解答6

题目:(P104) 使用cvCmp()创建一个掩码。加载一个真实的图像。使用cvsplit()将图像分割成红,绿,蓝三个单通道图像。 a.找到并显示绿图。 b.克隆这个绿图两次(分别命名为clone1和clone2)。 c.求出这个绿色平面的最大值和最小值。 d.将clone1的所有元素赋值为theash=(unsigned char)((最大值-最小值)/2.0)。 e.将clone

《学习OpenCV》课后习题解答5

题目:(P104) 为一个图像创建多个图像头。读取一个大小至少为100*100的图像。另创建两个图像头并设置它们的origion,depth,nChannels和widthStep属性同之前读取的图像一样。在新的图像头中,设置宽度为20,高度为30.最后,将imageData指针分别指向像素(5,10)和(50,60)像素位置。传递这两个新的图像头给cvNot()。最后显示最初读取的图像,在那个

《学习OpenCV》课后习题解答3

题目:(P104) 创建一个大小为100*100的三通道RGB图像。将它的元素全部置0.使用指针算法以(20,5)与(40,20)为项点绘制一个绿色平面。 解答: #include "cv.h" #include "highgui.h" int main(int argc, char** argv) {IplImage* img = cvCreateImage(cvSize(100,

《学习OpenCV》课后习题解答2

题目:(P104) 创建一个拥有三个通道的二维字节类型矩阵,大小为100*100,并将所有值赋为0。通过函数cvPtr2D将指针指向中间的通道(“绿色”)。以(20,5)与(40,20)为顶点间画一个绿色的长方形。 解答: (此题的关键在于懂得函数cvPtr2D的用法) #include "cv.h" #include "highgui.h" int main(int argc, c

【Qt6.3 基础教程 16】 掌握Qt中的时间和日期:QTimer和QDateTime的高效应用

文章目录 前言QTimer:定时任务的强大工具QTimer的基本用法高级特性:单次定时器 QDateTime:处理日期和时间获取当前日期和时间日期和时间的格式化输出日期和时间计算 用例:创建一个倒计时应用结论 前言 在开发桌面应用程序时,处理时间和日期是一个常见且重要的任务。Qt框架提供了强大的工具来处理与时间相关的功能,其中QTimer和QDateTime是最核心的类。本

Offending ECDSA key in /home/lierjun/.ssh/known_hosts:1

问题描述: 使用终端进行远程连接linux 连接格式:ssh root@ip 结果发出警告信息,信息提示: Offending ECDSA key in /home/user/.ssh/known_hosts:1 解决办法: cd /home/user/.ssh cat known_hosts sed -i '1d' known_hosts 然后再次进行链接可以了

VMWARE 安装失败 “FAILED TO CREATE THE REQUESTED REGISTRY KEY KEY

问题详情: 安装虚拟机VMWare Workstation8.0时出现“failed to create the requested registry key key installer error 1021” 解决问题: 1.在注册表(开始--运行[win+R]--输入regedit)中找到HKEY_LOCAL_MACHINE\SOFTWARE\VMware, Inc. 将V