当前位置: 首页 > 编程日记 > 正文

BZOJ 4059: [Cerc2012]Non-boring sequences ( )

要快速在一段子序列中判断一个元素是否只出现一次 , 我们可以预处理出每个元素左边和右边最近的相同元素的位置 , 这样就可以 O( 1 ) 判断.

考虑一段序列 [ l , r ] , 假如我们找到了序列中唯一元素的位置 p , 那我们只需检查 [ l , p - 1 ] & [ p + 1 , r ] 是否 non-boring 即可 . 

如何检查 序列 [ l , r ] 呢 ? 假如从左往右或者从右往左找 , 最坏情况下是 O( n ) , 总时间复杂度会变成 O( n² ) ; 假如我们从两边往中间找 , 那最坏情况是唯一元素在中间 ,  单次是 O( n ) , 但是现在划分出来的递归处理的左右两部分都是原序列长度的一半 , 这样总时间复杂度就是 O( nlogn ) 了

------------------------------------------------------------------------------------------------------

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<map>
#define rep( i , n ) for( int i = 0 ; i < n ; ++i )
#define clr( x , c ) memset( x , c , sizeof( x ) )
using namespace std;
const int maxn = 200000 + 5;
int seq[ maxn ] , L[ maxn ] , R[ maxn ] , n;
map< int , int > S;
#define UNIQUE( x ) ( L[ x ] < l && R[ x ] > r )
bool check( int l , int r ) {
if( l >= r ) return true;
int t[ 2 ] = { l , r };
for( int p = 0 ; t[ 0 ] <= t[ 1 ] ; ( p ^= 1 ) ? t[ 0 ]++ : t[ 1 ]-- )
if( UNIQUE( t[ p ] ) )
   return check( l , t[ p ] - 1  ) && check( t[ p ] + 1 , r );
return false;
}
int main() {
freopen( "test.in" , "r" , stdin );
int t;
cin >> t;
while( t-- ) {
scanf( "%d" , &n );
rep( i , n )
L[ i ] = -1 , R[ i ] = n;
S.clear();
rep( i , n ) {
   scanf( "%d" , seq + i );
   if( S.find( seq[ i ] ) != S.end() )
       L[ i ] = S[ seq[ i ] ];
   S[ seq[ i ] ] = i;
}
S.clear();
for( int i = n - 1 ; i >= 0 ; i-- ) {
   if( S.find( seq[ i ] ) != S.end() )
R[ i ] = S[ seq[ i ] ];
   S[ seq[ i ] ] = i;
}
printf( check( 0 , n - 1 ) ? "non-boring\n" : "boring\n" );
}
return 0;
}

------------------------------------------------------------------------------------------------------

4059: [Cerc2012]Non-boring sequences

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 300  Solved: 105
[Submit][Status][Discuss]

Description

我们害怕把这道题题面搞得太无聊了,所以我们决定让这题超短。一个序列被称为是不无聊的,仅当它的每个连续子序列存在一个独一无二的数字,即每个子序列里至少存在一个数字只出现一次。给定一个整数序列,请你判断它是不是不无聊的。

Input

第一行一个正整数T,表示有T组数据。每组数据第一行一个正整数n,表示序列的长度,1 <= n <= 200000。接下来一行n个不超过10^9的非负整数,表示这个序列。

Output

对于每组数据输出一行,输出"non-boring"表示这个序列不无聊,输出"boring"表示这个序列无聊。

Sample Input

4
5
1 2 3 4 5
5
1 1 1 1 1
5
1 2 3 2 1
5
1 1 2 1 1

Sample Output

non-boring
boring
non-boring
boring

HINT

Source

鸣谢Tjz

转载于:https://www.cnblogs.com/JSZX11556/p/4632774.html

相关文章:

Java项目:小蜜蜂扩音器网上商城系统(java+JSP+Servlet+JDBC+Ajax+mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述 用户功能模块&#xff1a; 用户注册&#xff1a; 用户登录&#xff1a;商品模块&#xff1a;订单模块&#xff1b;后台管理系统功能&#xff1a;管理员模块&#xff1a; 商品模块&#xff1a;…

WebBrowserProgramming - Python Wiki

WebBrowserProgramming - Python WikiWeb Browser Programming in Python

C++ transform for_each

#include<iostream>#include<vector>#include <list>#include <algorithm>#include <functional> using namespace std; //不需拷贝&#xff0c;速度快void square(int &elementParam){ elementParam elementParam*elementParam;} //速度…

When should static_cast, dynamic_cast and reinterpret_cast be used?

这是我偶然在 http://stackoverflow.com/questions/ 网页上发现的一个问题&#xff08;类似博客园的博问&#xff09;&#xff0c;问题主要是关于询问应该怎样使用&#xff0c;以及何时使用C里面的这几种类型转换操作符&#xff1a;static_case, dynamic_cast&#xff0c;以及 …

Java项目:养老院管理系统(java+SSM+JSP+Easyui+maven+mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 运行环境&#xff1a; JDK1.8、tomcat8、eclipse、mysql5.6、Navicat 功能实现&#xff1a; 用户: 用户名,登录密码,姓名,性别,出生日期,用户照片,联系电话,邮箱,家庭地址,注册时间 老人: 老人编号,姓名,…

Linux访问Windows磁盘实现共享

业务需求说明&#xff1a;公司在部署hadoop集群和DB server与SAN存储&#xff0c;公司的想法是前端通过DB Server能够将非结构化的数据能放进SAN存储当中&#xff0c;而hadoop集群也能够访问这个SAN存储。因此需要在SAN磁盘阵列中开辟一个共享区域&#xff0c;这个区域技能让DB…

ubuntu环境ceph配置入门(一)

为什么80%的码农都做不了架构师&#xff1f;>>> 环境&#xff1a;ubuntu server 14.04 64bit&#xff0c;安装ceph版本0.79 正常情况下应有多个主机&#xff0c;这里为了快速入门以一台主机为例&#xff0c;多台主机配置方式类似。 1. 配置静态IP及主机名 静态IP配…

mysql查看当前实时连接数

静态查看: SHOW PROCESSLIST; SHOW FULL PROCESSLIST; SHOW VARIABLES LIKE %max_connections%; SHOW STATUS LIKE %Connection%; 实时查看&#xff1a; mysql> show status like Threads%; -------------------------- | Variable_name | Value | ------------…

lsof 简介

lsof简介 lsof&#xff08;listopen files&#xff09;是一个列出当前系统打开文件的工具。在linux环境下&#xff0c;任何事物都以文件的形式存在&#xff0c;通过文件不仅仅可以访问常规数据&#xff0c;还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协…

Java项目:健身器材商城系统(java+Jdbc+Servlet+Ajax+Fileupload+mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 mysql Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09; 项目技术&#xff1a; Jdbc Servlert html css JavaScrip…

Xcode中如何解决无法使用svn命令行的问题

今天在自己机器上安装了xp虚拟机,然后在xp虚拟机上安装了svn的服务器.发现原本Xcode5以后就自带的svn竟然在终端无法使用命令行,出现了以下的错误: xcrun: error: active developer path ("/Volumes/Xcode/Xcode.app/Contents/Developer") does not exist, use xcode…

查看和设置MySQL数据库字符集(转)

查看和设置MySQL数据库字符集作者&#xff1a;scorpio 2008-01-21 10:05:17 标签&#xff1a; 杂谈 Liunx下修改MySQL字符集&#xff1a;1.查找MySQL的cnf文件的位置find / -iname *.cnf -print /usr/share/mysql/my-innodb-heavy-4G.cnf/usr/share/mysql/my-large.cnf/usr/sha…

数据库管理工具dbeaver

https://dbeaver.io/ 转载于:https://www.cnblogs.com/mingzhang/p/11016229.html

linux文件权限详解

linux文件权限详解 一、文件和目录权限概述在linux中的每一个文件或目录都包含有访问权限&#xff0c;这些访问权限决定了谁能访问和如何访问这些文件和目录。通过设定权限可以从以下三种访问方式限制访问权限&#xff1a;只允许用户自己访问&#xff1b;允许一个预先指定的用户…

linux定时器(crontab)实例

linux实验示例----实现每2分钟将“/etc”下面的文件打包存储到“/usr/lobal”目录下 Step1&#xff1a;编辑当前用户的crontab并保存终端输入&#xff1a;>crontab -u root -l #查看root用户设置的定时器>crontab -u root -e #进入vi编译模式 00-59/2 * * * * /bin/bash …

Java项目:晚会抽奖系统(java+Jdbc+Servlet+Ajax+mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 mysql Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09; 项目技术&#xff1a; Jdbc Servlert html css JavaScrip…

hdu 4587 2013南京邀请赛B题/ / 求割点后连通分量数变形。

题意&#xff1a;求一个无向图的&#xff0c;去掉两个不同的点后最多有几个连通分量。 思路&#xff1a;枚举每个点&#xff0c;假设去掉该点&#xff0c;然后对图求割点后连通分量数&#xff0c;更新最大的即可。算法相对简单&#xff0c;但是注意几个细节&#xff1a; 1&…

javascript中 (function(){})();如何理解?

javascript中 (function(){})();如何理解? javascript中: (function(){})()是匿名函数&#xff0c;主要利用函数内的变量作用域&#xff0c;避免产生全局变量&#xff0c;影响整体页面环境&#xff0c;增加代码的兼容性。 (function(){})是一个标准的函数定义&#xff0c;但是…

通过IP地址和子网掩码与运算计算相关地址

知道ip地址和子网掩码后可以算出&#xff1a; 1、网络地址 2、广播地址 3、地址范围 4、本网有几台主机 例1&#xff1a;下面例子IP地址为1921681005子网掩码是2552552550。算出网络地址、广播地址、地址范围、主机数。 一)分步骤计算 1) 将IP地址和子网掩码换算为二进制…

Java项目:兼职平台系统(java+Springboot+ssm+HTML+maven+Ajax+mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 mysql Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09; 项目技术&#xff1a; HTML Springboot SpringMVC MyBatis…

java实现时间的比较

时间大小的比较以及把String类型的时间转换为Date类是时间在开发中是非常常见的&#xff0c;下面的主要是一个工具方法 public class Test {public static void main(String[] args) {// TODO Auto-generated method stubString sTime "2015-07-13";String fTime &…

在eclipse中通过基于spring data的easyrest风格的maven项目操纵cassandra和lucene

一、项目前提步骤1>、创建键空间CREATE KEYSPACE mykeyspaceWITH REPLICATION { class : SimpleStrategy, replication_factor : 1 };2>、创建表和关系数据库一样&#xff0c;开发前需要先建表&#xff0c;再操纵CREATE TABLE tweet (id uuid PRIMARY KEY,nickName text…

JAVA 多线程实现包子铺(买包子,吃包子)

1 package baozi;2 3 /*4 生产者&#xff08;包子铺&#xff09;类&#xff1a;是一个 线程类&#xff0c;继承Thread5 设置线程任务&#xff08;run&#xff09;&#xff1a;生产包子6 对包子 进行判断7 true&#xff1a;有包子8 包子铺调用wait方法进…

字符串面试题(一)字符串逆序

字符串逆序可以说是最经常考的题目。这是一道入门级的题目&#xff0c;相信80%的程序员经历过这道题。给定一个字符串s&#xff0c;将s中的字符顺序颠倒过来&#xff0c;比如s"abcd"&#xff0c;逆序后变成s"dcba"。 普通逆序 基本上没有这么考的&#xf…

Java项目:在线淘房系统(租房、购房)(java+SpringBoot+Redis+MySQL+Vue+SpringSecurity+JWT+ElasticSearch+WebSocket)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 该系统有三个角色&#xff0c;分别是&#xff1a;普通用户、房屋中介、管理员。普通用户的功能&#xff1a;浏览房屋信息、预约看房、和中介聊天、申请成为中介等等。房屋中介的功能&#xff1a;发布房屋信息…

Be a person

做人不能太实诚 尤其是干我们这行的 多久时间能做完 你自己心里要有个估算 然后把时间再往后延 别他妈给自己找罪受 转载于:https://www.cnblogs.com/wskgjmhh/p/4644840.html

Solr配置文件分析与验证

前面一篇开始学习solr的时候&#xff0c;做了个入门的示例http://6738767.blog.51cto.com/6728767/1401865。虽然可以检索出内容&#xff0c;但总和想象的结果有差异——比如&#xff0c;检索“天龙”两个字&#xff0c;按常规理解&#xff0c;就应该只出来《天龙八部》才对&am…

oracle启用归档日志

一、开启归档 1、查看归档信息 SQL> archive log list Database log mode No Archive Mode Automatic archival Disabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 244 Current log sequence …

C++派生类与基类构造函数调用次序

本文用来测试C基类和派生类构造函数&#xff0c;析构函数&#xff0c;和拷贝构造函数的调用次序。运行环境&#xff1a;SUSE Linux Enterprise Server 11 SP2 (x86_64) #include <iostream>using namespace std;class Base{public:Base(){cout << "Base Cons…

Java项目:在线点餐系统(java+Springboot+Maven+mybatis+Vue+mysql+Redis)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 项目描述&#xff1a; 这是一个基于SpringBootVue框架开发的在线点餐系统。首先&#xff0c;这是一个前后端分离的项目。具有一个在线点餐系统该有的所有功能。 项目功能&#xff1a; 此项目分为两个角色&…