【链接】 我是链接,点我呀:)

【题意】

在这里输入题意

【题解】

枚举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的更多相关文章

  1. UVa - 1618 - Weak Key

    Cheolsoo is a cryptographer in ICPC(International Cryptographic Program Company). Recently, Cheolsoo ...

  2. 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 ...

  3. 紫书 习题 8-16 UVa 1618 (中途相遇法)

    暴力n的四次方, 然而可以用中途相遇法的思想, 分左边两个数和右边两个数来判断, 最后合起来判断. 一边是n平方logn, 合起来是n平方logn(枚举n平方, 二分logn) (1)两种比较方式是相 ...

  4. Java50道经典习题-程序16 在控制台上打印九九乘法表

    题目:输出9*9口诀.分析:利用双重for循环进行输出,分行与列考虑,共9行9列,i控制行,j控制列. public class Prog16 { public static void main(St ...

  5. 弱键(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 ...

  6. shell习题第16题:查用户

    [题目要求] 写个shell,看看你的Linux系统中是否有自定义的用户(普通用户),如有有的话统计个数 [核心要点] CentOS6,uid>=500 CentOS7,uid>=1000 ...

  7. UVA1618-Weak Key(RMQ)

    Problem UVA1618-Weak Key Accept: 103  Submit: 588Time Limit: 3000 mSec Problem Description Cheolsoo ...

  8. MySQL完整性约束foreign key与表操作。

    一  MySQL中表的完整性约束: 我们首先知道约束条件跟类型的宽度一样,都是可选的,也就是说,我们在创建表的时候可以不指定,但是为了创建的表更加的完整,我们一般会加一些约束条件,name下面我们讲一 ...

  9. C++primer习题--第1章

    本文地址:http://www.cnblogs.com/archimedes/p/cpp-primer-chapter1-ans.html,转载请注明源地址. [习题 1.3] 编一个程序,在标准输出 ...

随机推荐

  1. Codeforces 987B. High School: Become Human

    解题思路: 1.题意:判断x^y和y^x谁大谁小. 2.由于x^y和y^x太大了,时间复杂度也不允许,所以做同等变换,比较e^(ylnx)和e^(xlny). 3.即为比较ylnx和xlny的大小. ...

  2. 【原创】rman备份出现ORA-19625

    [oracle@sunny stage]$ rman target / Recovery Manager: Release 10.2.0.1.0 - Production on Sun Mar 18 ...

  3. C#多播委托和事件的区别与关系

    事件是对委托的封装. 如果一个类里,你把一个委托声明为 public 了,那么外部就可以随意改变委托变量的值,包括清空委托变量等,这样的话就违背了面向对象思想的封装特性:但如果声明为 private ...

  4. 74HC164应用

    管脚定义与内部逻辑图 注:管脚一般A.B连在一起作为一个输入:CLR硬件接VDD. 原理如下:每8个CLK上升沿,bit分别从QA移至QH,所以给定一个字节,左移后送入至A/B,这样Bit7经过8个上 ...

  5. SpringBoot学习笔记(12)----SpringBoot实现多个 账号轮询发送邮件

    首先,引入发送邮件的依赖,由于freemarker自定义模板,所以也需要把freemarker的依赖引入 pom.xml文件 <dependency> <groupId>org ...

  6. Intellij IDEA 2018.3激活破解方法(解决key is invalid)

    1.程序安装包: https://download.jetbrains.8686c.com/idea/ideaIU-2018.3.exe 2.破解补丁:http://idea.lanyus.com/j ...

  7. iOS开发——AFNetworking基于https的使用

    应公司项目需求,之前的项目使用的http,新项目要求使用https,这篇博客是在AFNetworking框架基于http的基础上修改而来. 1.在开始前,先要把 .crt 文件转成 .cer 文件,然 ...

  8. word中输入公式方案

    如何开启word公式模式:“Alt”+"=" 1. 如何输入矩阵: 使用&链接行元素,@进行换行,空格键进行转换 如输出: 先开启公式模式:“Alt”+"=&qu ...

  9. LAMP环境搭建备忘 -- Apache、pHp 安装 (二)

    上一篇 Linux 已经安装好了,我们选择了 CentOS 7 的最小化安装,即没有图形界面,并且我们在安装时设置了网络连接即能够连上外部网络,还设置了 root 密码.下面我们要在此基础上继续安装 ...

  10. 使用systemctl自定义系统服务

    1.创建系统服务文件,格式如下: [Unit] Description=httpd After=network.target [Service] Type=forking ExecStart=/usr ...