当前位置: 首页 > news >正文

UVA1618 Weak Key(枚举优化/RMQ)

题目链接


在这里插入图片描述
1.一看是这种暴力的题,还好数据范围不是很大,下面的代码时间复杂度很玄学,最坏貌似达到了O(n3),但是实际上并没有超时,也许是数据不行?或者评测机太猛?

2.在满足两种关系的基础上,随便枚举两个数貌似都行,这里我枚举的q和s,这样的话p恰好在q的左边,r恰好夹在q和s中间。看大部分人都是从p、q下手,都行吧

#include <set>
#include <map>
#include <stack>
#include <queue>
#include <math.h>
#include <cstdio>
#include <string>
#include <cstring>
#include <sstream>
#include <iostream>
#include <algorithm>
#include <unordered_map>
using namespace std;
#define lowbit(x) (x&(-x))
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> P;
const double eps=1e-8;
const double pi=acos(-1.0);
const int inf=0x3f3f3f3f;
const ll INF=1e18;
const int Mod=1e9+7;
const int maxn=2e5+10;

int a[maxn],dp1[maxn][25],dp2[maxn][25];
int n;

void Min_init(){
    for(int i=1;i<=n;i++)
        dp1[i][0]=a[i];
    for(int j=1;(1<<j)<=n;j++)
        for(int i=1;i+(1<<j-1)<=n;i++)
            dp1[i][j]=min(dp1[i][j-1],dp1[i+(1<<j-1)][j-1]);
}

int query_min(int l,int r){
    int k=0;
    while((1<<(k+1))<=r-l+1) k++;
    return min(dp1[l][k],dp1[r-(1<<k)+1][k]);
}

void Max_init(){
    for(int i=1;i<=n;i++)
        dp2[i][0]=a[i];
    for(int j=1;(1<<j)<=n;j++)
        for(int i=1;i+(1<<j-1)<=n;i++)
            dp2[i][j]=max(dp2[i][j-1],dp2[i+(1<<j-1)][j-1]);
}

int query_max(int l,int r){
    int k=0;
    while((1<<(k+1))<=r-l+1) k++;
    return max(dp2[l][k],dp2[r-(1<<k)+1][k]);
}

int main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int t;
    cin>>t;
    while(t--){
        cin>>n;
        for(int i=1;i<=n;i++) cin>>a[i];
        Min_init(),Max_init();
        int flag=0;
        //Aq>As>Ap>Ar
        for(int i=2;i<=n-2;i++){  //第一层枚举q
            for(int j=i+1;j<=n;j++){  //第二层枚举合法的s
                if(a[j]<a[i] && j-i>1){
                    int r=query_min(i+1,j-1);
                    if(r>=a[j]) continue; //RMQ查询是否存在r
                    for(int k=1;k<=i;k++)  //第三次枚举合法的p
                        if(a[k]>r && a[k]<a[j]){
                            flag=1;
                            break;
                        }
                    if(flag) break;
                }
            }
            if(flag) break;
        }
        if(flag){
            cout<<"YES"<<endl;
            continue;
        }
		//Aq<As<Ap<Ar,具体方法同上
        for(int i=2;i<=n-2;i++){
            for(int j=i+1;j<=n;j++){
                if(a[j]>a[i] && j-i>1){
                    int r=query_max(i+1,j-1);
                    if(r<=a[j]) continue;
                    for(int k=1;k<=i;k++)
                        if(a[k]<r && a[k]>a[j]){
                            flag=1;
                            break;
                        }
                    if(flag) break;
                }
            }
            if(flag) break;
        }
        if(flag){
            cout<<"YES"<<endl;
        }else cout<<"NO"<<endl;
    }
    return 0;
}




相关文章:

  • Codeforces Round #636 (Div. 3) D. Constant Palindrome Sum(差分)
  • 用Stopwatch类来测试你的程序运行时间
  • UVA1613 K-Graph Oddity(无向图染色简单题)
  • 属于我们的移动智能时代
  • UVA1614 Hell on the Markets(结论+贪心)
  • OPhone开发环境设置备忘录
  • 尺有所长,寸有所短——谁是主人
  • Codeforces Round #636 (Div. 3) E. Weights Distributing(bfs求无向无权图最短路径)
  • 另一种MTK特效制作的方法,层复制
  • 字典树(Trie)——入门篇
  • 警惕:电信加紧发力为哪般?(下)
  • Codeforces Round #637 (Div. 2) C. Nastya and Strange Generator(阅读理解/思维)
  • Broken Space Bar(Trie)[待补]
  • 小白兔和小灰兔
  • VC图片显示特效
  • 07.Android之多媒体问题
  • docker python 配置
  • Docker: 容器互访的三种方式
  • Github访问慢解决办法
  • golang中接口赋值与方法集
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • JavaScript HTML DOM
  • k8s如何管理Pod
  • Lucene解析 - 基本概念
  • Magento 1.x 中文订单打印乱码
  • mysql_config not found
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 聊聊flink的TableFactory
  • 那些年我们用过的显示性能指标
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 删除表内多余的重复数据
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 在Mac OS X上安装 Ruby运行环境
  • scrapy中间件源码分析及常用中间件大全
  • 数据可视化之下发图实践
  • 选择阿里云数据库HBase版十大理由
  • 组复制官方翻译九、Group Replication Technical Details
  • #Z2294. 打印树的直径
  • $(function(){})与(function($){....})(jQuery)的区别
  • (6)添加vue-cookie
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (LeetCode 49)Anagrams
  • (备忘)Java Map 遍历
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • ***监测系统的构建(chkrootkit )
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NET delegate 委托 、 Event 事件,接口回调
  • .NET 动态调用WebService + WSE + UsernameToken
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .netcore 获取appsettings
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .net中的Queue和Stack
  • .net中应用SQL缓存(实例使用)