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

【题意】

在这里输入题意

【题解】

枚举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. HDU 3342 Legal or Not【拓扑排序】

    题意:给出n,m,人的编号为 0到n-1,再给出m个关系,问能不能够进行拓扑排序 #include<iostream> #include<cstdio> #include< ...

  2. HDU 1587 Flowers【贪心】

    题意:给出n种花的价钱,和总的金额m,问最多能够买到多少朵花.先排序,然后就是便宜的花在能够买的范围内能够多买就多买 #include<iostream> #include<cstd ...

  3. PHP SOAP模块的使用方法:NON-WSDL模式

    PHP SOAP扩展可以帮助我们很轻松的实现web service服务,在PHP的SOAP扩展中主要有两种操作模式:WSDL模式和NON-WSDL模式,前者通过使用WSDL文件名作为参数,并从 WSD ...

  4. php nusoap类的使用、用法、出错 及说明

    NuSOAP 是 PHP 环境下的 WEB 服务编程工具,用于创建或调用 WEB 服务它是一个开源软件,当前版本是 0.7.2 ,支 持 SOAP1.1 WSDL1.1 ,可以与其他支持 SOAP1. ...

  5. win10安装node/yarn报错2503/2502

    当我们从node官网下载windows安装包时会得到一个msi文件,由于win10的安全策略比较严格,所以我们在右键菜单上找不到以管理员运行这个按钮: 普通的exe文件: msi文件: 解决办法: 此 ...

  6. 移动端mete设置

    <!DOCTYPE html> <!-- 使用 HTML5 doctype,不区分大小写 --> <html lang="zh-cmn-Hans"&g ...

  7. 关于python 中的偏函数转载

    Python的functools模块提供了很多有用的功能,其中一个就是偏函数(Partial function).要注意,这里的偏函数和数学意义上的偏函数不一样. 在介绍函数参数的时候,我们讲到,通过 ...

  8. 一:1.2【print&input与变量和运算符】

    [路径] 绝对路径:从根目录开始链接的路径  --->cd C:\Windows\Boot\DVD\EFI\en-US 相对路径:不从根目录开始链接的路径 ----> cd Boot\DV ...

  9. 题解 P3128 【[USACO15DEC]最大流Max Flow】

    此类型题目有两种比较常见的做法:树链剖分和树上差分. 本题有多组修改一组询问,因此树上差分会比树链剖分优秀很多. 这里两种方法都进行介绍. 树链剖分和树上差分的本质都是将一颗树转换为一个区间,然后进行 ...

  10. XML快速注释

    eclipse中编辑java或C/C++,python文件时,注释的快捷键均为 "CTRL + / ",编辑xml文件时,该快捷键无效. eclipse XML 注释:CTRL + ...