8-16 不无聊序列 non-boring sequences uva1608
题意: 如果一个序列的任意连续子序列中至少有一个只出现一次的元素 则称这个序列是 不无聊序列 输入一个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的更多相关文章
- 【转】Python数据类型之“序列概述与基本序列类型(Basic Sequences)”
[转]Python数据类型之“序列概述与基本序列类型(Basic Sequences)” 序列是指有序的队列,重点在"有序". 一.Python中序列的分类 Python中的序列主 ...
- Python数据类型之“序列概述与基本序列类型(Basic Sequences)”
序列是指有序的队列,重点在"有序". 一.Python中序列的分类 Python中的序列主要以下几种类型: 3种基本序列类型(Basic Sequence Types):list. ...
- 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 ...
- [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 ...
- [Swift]LeetCode946. 验证栈序列 | Validate Stack Sequences
Given two sequences pushed and popped with distinct values, return true if and only if this could ha ...
- LeetCode 187. 重复的DNA序列(Repeated DNA Sequences)
187. 重复的DNA序列 187. Repeated DNA Sequences 题目描述 All DNA is composed of a series of nucleotides abbrev ...
- LeetCode 946. 验证栈序列(Validate Stack Sequences) 26
946. 验证栈序列 946. Validate Stack Sequences 题目描述 Given two sequences pushed and popped with distinct va ...
- 「10.16晚」序列(....)·购物(性质)·计数题(DP)
A. 序列 考场不认真读题会死..... 读清题就很简单了,分成若干块,然后块内递增,块外递减,同时使最大的块长为$A$ B. 购物 考场思路太局限了,没有发现性质, 考虑将$a_{i}$,排序前缀和 ...
- 『无为则无心』Python基础 — 16、Python序列之字符串的下标和切片
目录 1.序列的概念 2.字符串的下标说明 3.字符串的切片说明 1.序列的概念 序列sequence是Python中最基本的数据结构.指的是一块可存放多个值的连续内存空间,这些值按一定顺序排列,可通 ...
随机推荐
- linux缓存手动清理
一般情况下不建议这么做, 如果你确定向的话还是可以的首先运行sync把未存盘的cache都写入磁盘,稍等片刻, 或者是直接运行sync 两遍 然后echo 1 试试应该大部分缓存可以释放 释放ca ...
- 如何给list清空
1.list = new ArrayList<String>(): 2.list.clear(); 3.list=null;
- 是否使用TDD(测试驱动开发)进行UI开发
问题 StackOverflow上有一则是否使用TDD(测试驱动开发)进行UI开发 的提问. _JacobE_问: 对于是否使用TDD进行开发UI这件事,我想了很久,但难以决定.我想听听你们的意见. ...
- 【AtCoder】AGC022 F - Leftmost Ball 计数DP
[题目]F - Leftmost Ball [题意]给定n种颜色的球各k个,每次以任意顺序排列所有球并将每种颜色最左端的球染成颜色0,求有多少种不同的颜色排列.n,k<=2000. [算法]计数 ...
- C++中的二级指针和指针引用函数传参
在函数的使用过程中,我们都明白传值和传引用会使实参的值发生改变.那么能够通过传指针改变指针所指向的地址吗? 在解决这个问题之前,也许我们应该先了解指针非常容易混淆的三个属性: ①.指针变量地址(&am ...
- zabbix lld使用trapper方式(zabbix_sender)
自动发现脚本文件输出格式: { "data": [ { "{#BIND_PERF}": "BIND INCOMING QUERY" }, { ...
- package.json安装依赖的箭头?
- 2016.5.15——leetcode:Number of 1 Bits ,
leetcode:Number of 1 Bits 代码均测试通过! 1.Number of 1 Bits 本题收获: 1.Hamming weight:即二进制中1的个数 2.n &= (n ...
- RTSP消息交互过程
c表示客户端,s表示RTSP服务器端 第一步:查询服务器可用方法 1 c---s :OPTION request //查询s有哪些方法可用 s---c:OPTION response //s回应信息的 ...
- 【codeforces】【比赛题解】#854 CF Round #433 (Div.2)
cf一如既往挺丧 看丧题点我! [A]分数 Petya是数学迷,特别是有关于分数的数学.最近他学了所谓一个分数被叫做“真分数”当且仅当其分子小于分母,而一个分数被叫做“最简分数”当且仅当其分子分母互质 ...