【习题 8-16 UVA - 1618】Weak Key
【链接】 我是链接,点我呀:)
【题意】
在这里输入题意
【题解】
枚举N[q]和N[r]的位置
因为N[q]是最大值,且N[r]是最小值。
且它们是中间的两个。
枚举这两个可以做到不重复枚举。
然后假设我们枚举了q和r的位置分别为i和j
(a[i]>a[j]
那么我们接下来需要得到两个东西。
1.在j的右边找到一个尽可能大的且小于a[i]的数字dp[0][i][j];
2.在i的左边找到一个尽可能小且大于a[j]的数字dp[1][i][j]。
然后判断一下dp[0][i][j]> a[j] && dp[1][i][j]< a[i] && dp[0][i][j] > dp[1][i][j]
是否成立就好
还要考虑a[i]<a[j]的情况(有两种情况之一成立都是弱键。
方便起见。
直接把原数组翻转一下。
就会发现用上面说的思路重新做一遍就可以了。
dp[0..1][i][j]这两个数组可以用一个set.在\(O(N^2*log_2N)\)的复杂度下得到。
【代码】
/*
dp1[i][j] 表示 j右边 大于a[j]且小于a[i]的
最大数字
->小于a[i]的最大数字
dp2[i][j] 表示i左边 大于a[j]且最小的数字
for (int j = n;j >= 1;j--){
}
*/
#include <bits/stdc++.h>
#define ll long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define all(x) x.begin(),x.end()
#define pb push_back
#define ls l,mid,rt<<1
#define rs mid+1,r,rt<<1
using namespace std;
const double pi = acos(-1);
const int dx[4] = {0,0,1,-1};
const int dy[4] = {1,-1,0,0};
const int N = 5e3;
set<int> myset;
int n,a[N+10],dp[2][N+10][N+10];
bool solve(){
myset.clear();
rep2(j,n,1){
rep2(i,j-1,1)
if (a[i]>a[j]){
auto temp = myset.upper_bound(a[i]);
if (temp==myset.begin()) {
dp[0][i][j] = 0;
continue;
}
temp--;
dp[0][i][j] = (*temp);
}
myset.insert(a[j]);
}
myset.clear();
rep1(i,1,n){
rep1(j,i+1,n)
if (a[i]>a[j]){
auto temp = myset.upper_bound(a[j]);
if (temp==myset.end()) {
dp[1][i][j] = 0;
continue;
}
dp[1][i][j] = (*temp);
}
myset.insert(a[i]);
}
rep1(i,1,n)
rep1(j,i+1,n)
if (a[i]>a[j]){
if (dp[0][i][j]==0 || dp[1][i][j]==0) continue;
if (dp[0][i][j]>a[j] && dp[1][i][j]<a[i] &&
dp[0][i][j]>dp[1][i][j]){
return true;
}
}
return false;
}
int main(){
#ifdef LOCAL_DEFINE
freopen("rush_in.txt", "r", stdin);
#endif
ios::sync_with_stdio(0),cin.tie(0);
int T;
cin >> T;
while (T--){
cin >> n;
rep1(i,1,n) cin >> a[i];
if (solve()){
cout<<"YES"<<endl;
continue;
}
reverse(a+1,a+1+n);
if (solve()){
cout<<"YES"<<endl;
continue;
}
cout<<"NO"<<endl;
}
return 0;
}
【习题 8-16 UVA - 1618】Weak Key的更多相关文章
- UVa - 1618 - Weak Key
Cheolsoo is a cryptographer in ICPC(International Cryptographic Program Company). Recently, Cheolsoo ...
- UVA - 1618 Weak Key(RMQ算法)
题目: 给出k个互不相同的证书组成的序列Ni,判断是否存在4个证书Np.Nq.Nr.Ns(1≤p<q<r<s≤k)使得Nq>Ns>Np>Nr或者Nq<Ns&l ...
- 紫书 习题 8-16 UVa 1618 (中途相遇法)
暴力n的四次方, 然而可以用中途相遇法的思想, 分左边两个数和右边两个数来判断, 最后合起来判断. 一边是n平方logn, 合起来是n平方logn(枚举n平方, 二分logn) (1)两种比较方式是相 ...
- Java50道经典习题-程序16 在控制台上打印九九乘法表
题目:输出9*9口诀.分析:利用双重for循环进行输出,分行与列考虑,共9行9列,i控制行,j控制列. public class Prog16 { public static void main(St ...
- 弱键(Weak Key, ACM/ICPC Seoul 2004, UVa1618)
I think: 给出k(4≤k≤5000)个互不相同的整数组成的序列Ni,判断是否存在4个整数Np.Nq.Nr和Ns(1≤p<q<r<s≤k),使得Nq>Ns>Np&g ...
- shell习题第16题:查用户
[题目要求] 写个shell,看看你的Linux系统中是否有自定义的用户(普通用户),如有有的话统计个数 [核心要点] CentOS6,uid>=500 CentOS7,uid>=1000 ...
- UVA1618-Weak Key(RMQ)
Problem UVA1618-Weak Key Accept: 103 Submit: 588Time Limit: 3000 mSec Problem Description Cheolsoo ...
- MySQL完整性约束foreign key与表操作。
一 MySQL中表的完整性约束: 我们首先知道约束条件跟类型的宽度一样,都是可选的,也就是说,我们在创建表的时候可以不指定,但是为了创建的表更加的完整,我们一般会加一些约束条件,name下面我们讲一 ...
- C++primer习题--第1章
本文地址:http://www.cnblogs.com/archimedes/p/cpp-primer-chapter1-ans.html,转载请注明源地址. [习题 1.3] 编一个程序,在标准输出 ...
随机推荐
- Codeforces 987B. High School: Become Human
解题思路: 1.题意:判断x^y和y^x谁大谁小. 2.由于x^y和y^x太大了,时间复杂度也不允许,所以做同等变换,比较e^(ylnx)和e^(xlny). 3.即为比较ylnx和xlny的大小. ...
- 【原创】rman备份出现ORA-19625
[oracle@sunny stage]$ rman target / Recovery Manager: Release 10.2.0.1.0 - Production on Sun Mar 18 ...
- C#多播委托和事件的区别与关系
事件是对委托的封装. 如果一个类里,你把一个委托声明为 public 了,那么外部就可以随意改变委托变量的值,包括清空委托变量等,这样的话就违背了面向对象思想的封装特性:但如果声明为 private ...
- 74HC164应用
管脚定义与内部逻辑图 注:管脚一般A.B连在一起作为一个输入:CLR硬件接VDD. 原理如下:每8个CLK上升沿,bit分别从QA移至QH,所以给定一个字节,左移后送入至A/B,这样Bit7经过8个上 ...
- SpringBoot学习笔记(12)----SpringBoot实现多个 账号轮询发送邮件
首先,引入发送邮件的依赖,由于freemarker自定义模板,所以也需要把freemarker的依赖引入 pom.xml文件 <dependency> <groupId>org ...
- Intellij IDEA 2018.3激活破解方法(解决key is invalid)
1.程序安装包: https://download.jetbrains.8686c.com/idea/ideaIU-2018.3.exe 2.破解补丁:http://idea.lanyus.com/j ...
- iOS开发——AFNetworking基于https的使用
应公司项目需求,之前的项目使用的http,新项目要求使用https,这篇博客是在AFNetworking框架基于http的基础上修改而来. 1.在开始前,先要把 .crt 文件转成 .cer 文件,然 ...
- word中输入公式方案
如何开启word公式模式:“Alt”+"=" 1. 如何输入矩阵: 使用&链接行元素,@进行换行,空格键进行转换 如输出: 先开启公式模式:“Alt”+"=&qu ...
- LAMP环境搭建备忘 -- Apache、pHp 安装 (二)
上一篇 Linux 已经安装好了,我们选择了 CentOS 7 的最小化安装,即没有图形界面,并且我们在安装时设置了网络连接即能够连上外部网络,还设置了 root 密码.下面我们要在此基础上继续安装 ...
- 使用systemctl自定义系统服务
1.创建系统服务文件,格式如下: [Unit] Description=httpd After=network.target [Service] Type=forking ExecStart=/usr ...