题意: 如果一个序列的任意连续子序列中至少有一个只出现一次的元素  则称这个序列是 不无聊序列  输入一个n个元素的序列a   判断是不是不无聊序列

一开始想当然  以为只要 2位的子序列都满足即可  题目果然没有那么脑残   1212 就是一个反例。。。。

有一个重要的优化结论:   在总的序列找出一个  只出现一次的元素a[p]  如果没有 则无解   否则      继续递归寻找  a[L]-a[p-1]  和 a[p+1] -a[R]   !!! 再一次巧妙运用递归

其中 判断是否为 唯一元素的方法  :   先算出每个元素的左边和右边最近的相同元素!!

从左边向右边找  最坏情况 n2

从右边同理

从两边向中间找  最坏情况每次都在中间找到  tn=2 t 0.5n  所以复杂度为nlogn

#include<bits/stdc++.h>
using namespace std;
#define N 200000+5 int a[N];
int n,left1[N],right1[N]; bool uniqu(int x,int L,int R)
{
return left1[x]<L&&right1[x]>R;
} bool check(int L,int R)
{
if(L>=R)return true;
for(int d=;L+d<=R-d;d++)
{
if(uniqu(L+d,L,R))
return check(L,L+d-)&&check(L+d+,R);
if(L==R)break;
if(uniqu(R-d,L,R))
return check(L,R-d- )&&check(R-d+,R );
}
return false;
} int main()
{ int cas;cin>>cas;
while(cas--)
{
cin>>n;
map<int,int>mp;
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
if(!mp.count(a[i])) left1[i]=-;
else left1[i]=mp[a[i]];
mp[a[i]]=i;
}
mp.clear();
for(int i=n;i>=;i--)
{
if(!mp.count(a[i]))right1[i]=n+;
else right1[i]=mp[a[i]];
mp[a[i] ]=i;
} if(check(,n))
printf("non-boring\n");
else
printf("boring\n"); }
return ;
}

8-16 不无聊序列 non-boring sequences uva1608的更多相关文章

  1. 【转】Python数据类型之“序列概述与基本序列类型(Basic Sequences)”

    [转]Python数据类型之“序列概述与基本序列类型(Basic Sequences)” 序列是指有序的队列,重点在"有序". 一.Python中序列的分类 Python中的序列主 ...

  2. Python数据类型之“序列概述与基本序列类型(Basic Sequences)”

    序列是指有序的队列,重点在"有序". 一.Python中序列的分类 Python中的序列主要以下几种类型: 3种基本序列类型(Basic Sequence Types):list. ...

  3. R语言学习笔记:生成序列(Genenrating Sequences)

    R提供了多种生成不同类型序列的方法.如: > x<-1:20 > x [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 1 ...

  4. [Swift]LeetCode187. 重复的DNA序列 | Repeated DNA Sequences

    All DNA is composed of a series of nucleotides abbreviated as A, C, G, and T, for example: "ACG ...

  5. [Swift]LeetCode946. 验证栈序列 | Validate Stack Sequences

    Given two sequences pushed and popped with distinct values, return true if and only if this could ha ...

  6. LeetCode 187. 重复的DNA序列(Repeated DNA Sequences)

    187. 重复的DNA序列 187. Repeated DNA Sequences 题目描述 All DNA is composed of a series of nucleotides abbrev ...

  7. LeetCode 946. 验证栈序列(Validate Stack Sequences) 26

    946. 验证栈序列 946. Validate Stack Sequences 题目描述 Given two sequences pushed and popped with distinct va ...

  8. 「10.16晚」序列(....)·购物(性质)·计数题(DP)

    A. 序列 考场不认真读题会死..... 读清题就很简单了,分成若干块,然后块内递增,块外递减,同时使最大的块长为$A$ B. 购物 考场思路太局限了,没有发现性质, 考虑将$a_{i}$,排序前缀和 ...

  9. 『无为则无心』Python基础 — 16、Python序列之字符串的下标和切片

    目录 1.序列的概念 2.字符串的下标说明 3.字符串的切片说明 1.序列的概念 序列sequence是Python中最基本的数据结构.指的是一块可存放多个值的连续内存空间,这些值按一定顺序排列,可通 ...

随机推荐

  1. Openssh版本升级(Centos6.7)

    实现前提公司服务器需要进行安全测评,扫描漏洞的设备扫出了关于 openssh 漏洞,主要是因为 openssh的当前版本为5.3,版本低了,而yum最新的openssh也只是5.3,没办法只能到 rp ...

  2. 【转】(总结)Nginx配置文件nginx.conf中文详解

    本文转载自:http://www.ha97.com/5194.html 定义Nginx运行的用户和用户组 user www www; nginx进程数,建议设置为等于CPU总核心数 worker_pr ...

  3. android studio run得时候 选择开启对话框

    一个项目run 调试得时候,在Android studio3.0默认得设置是运行在上一个device上,我们通过改变设置,废话不多说,上图: 然后点击这个edit config 在miscellane ...

  4. Java并发编程原理与实战四十二:锁与volatile的内存语义

    锁与volatile的内存语义 1.锁的内存语义 2.volatile内存语义 3.synchronized内存语义 4.Lock与synchronized的区别 5.ReentrantLock源码实 ...

  5. Mycat从入门到放弃

    https://blog.csdn.net/u013235478/article/details/53178657

  6. windows git gui右键sublime打开当前文件编辑

    git安装目录\Git\libexec\git-core\git-gui.tcl的 proc create_common_diff_popup 下追加: $ctxm add command \ -la ...

  7. 20155233 2016-2017-2 《Java程序设计》第6周学习总结

    20155233 2016-2017-2 <Java程序设计>第6周学习总结 学习目标 理解流与IO 理解InputStream/OutPutStream的继承架构 理解Reader/Wr ...

  8. c++刷题(15/100)矩阵转置,最深子树

    题目一:矩阵转置 给定一个矩阵 A, 返回 A 的转置矩阵. 矩阵的转置是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引. 示例 1: 输入:[[1,2,3],[4,5,6],[7,8,9]] 输出 ...

  9. Qbot回归,已感染5.4万台计算机

    Qbot回归,已感染5.4万台计算机 近日,BAESystems的安全人员发表了一篇关于Qbot网络感知蠕虫回归的调查报告,指出已经感染了5.4万台计算机. FreeBuf百科 Qbot蠕虫,也叫Qa ...

  10. 【算法学习】Fhq-Treap(无旋Treap)

    Treap——大名鼎鼎的随机二叉查找树,以优异的性能和简单的实现在OIer们中广泛流传. 这篇blog介绍一种不需要旋转操作来维护的Treap,即无旋Treap,也称Fhq-Treap. 它的巧妙之处 ...