题意: 如果一个序列的任意连续子序列中至少有一个只出现一次的元素  则称这个序列是 不无聊序列  输入一个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. vue 开发过程中遇到的问题

    1. gitlab团队协作开发 2. element ui 问题集锦 3. 使用vue和ElementUI快速开发后台管理系统

  2. HTTP请求方式及状态码

  3. Java并发编程原理与实战十四:Lock接口的认识和使用

    保证线程安全演进: synchronized volatile AtomicInteger Lock接口提供的方法: void lock():加锁 void unlock():解锁 void lock ...

  4. SpringCloud (十) Hystrix Dashboard单体监控、集群监控、与消息代理结合

    一.前言 Dashboard又称为仪表盘,是用来监控项目的执行情况的,本文旨在Dashboard的使用 分别为单体监控.集群监控.与消息代理结合. 代码请戳我的github 二.快速入门 新建一个Sp ...

  5. vue组件之间传值方式解析

    vue组件之间传值方式解析一.父组件传到子组件 1.父组件parent代码如下: <template> <div class="parent"> <h ...

  6. Grunt、gulp、webpack、不要听着高大上你就上,试试Codekit?

    下载地址:https://incident57.com/codekit/ 官方网站了解更多 要编译Less.Sass.Stylus, CoffeeScript, Typescript, Jade, H ...

  7. translate 与 相对、绝对定位

    垂直水平居中是日常前端开发当中一个常见的需求,在支持 CSS3 属性的现代浏览器当中,有一个利用 CSS3 属性的垂直水平居中方法: position absolute; :; :; :transla ...

  8. 使用Picker的时候,让input输入框使用焦点,手机键盘不弹出

    $("#address").click(function(){ document.activeElement.blur(); })

  9. MeasureSpec介绍及使用详解

    一个MeasureSpec封装了父布局传递给子布局的布局要求,每个MeasureSpec代表了一组宽度和高度的要求.一个MeasureSpec有大小和模式组成.他有三种模式: UNSPECIFIED ...

  10. 利用Mysql5.7的新特性实现多机房高可用架构【转】

    再牛逼的架构也敌不过挖掘机,无论单机房内你的架构多么的高可用,多么的完善,当挖掘机挖下去那一瞬间,都是扯蛋,楼主所在的公司也被挖掘机挖断过光纤.电力线. 为什么大家都在谈论服务冗余,缓存击穿等高可用时 ...