如果一个序列中是否存在一段连续子序列中的每个元素在该子序列中都出现了至少两次,那么这个序列是无聊的,反正则不无聊。给你一个长度为n(n<=200000)的序列,判断这个序列是否无聊。

稀里糊涂AC的一道题。

如果一个序列不无聊,那么一定至少存在一个独一无二的元素。如果找到了该元素,那么只需分别判断该元素两侧的子序列是否无聊即可。找到一个独一无二的元素的期望时间复杂度为$O(n)$(n为当前序列长度),显然如果该独一无二的元素在中间的话,则复杂度$T(n)=2T(n/2)+O(n)=O(nlogn)$,但假如比较靠边的话,情况就有些尴尬了,最坏情况下复杂度为$O(n^2)$。解决方法是从两边向中间找,这样的话复杂度就成了$T(n)=max\{T(k)+T(n-k)+min(k,n-k)\}$,比较玄学,据说是$O(nlogn)$的,但我不会证明QAQ,而且不知道为啥一样的代码逻辑,很多都跑了100+ms,而我的却跑了2500+ms,勉强过掉...

 #include<bits/stdc++.h>

 using namespace std;
typedef long long ll;
const int N=2e5+;
int n,a[N],b[N],c[N],nn,pre[N],nxt[N],last[N]; void disc(int* a,int n) {
for(int i=; i<n; ++i)b[i]=a[i];
sort(b,b+n);
nn=unique(b,b+n)-b;
for(int i=; i<n; ++i)a[i]=lower_bound(b,b+nn,a[i])-b;
} int uni(int i,int l,int r) {return pre[i]<l&&nxt[i]>r;} int solve(int l,int r) {
if(l>=r)return ;
int mid=-;
for(int L=l,R=r; L<=R; ++L,--R) {
if(uni(L,l,r)) {mid=L; break;}
if(uni(R,l,r)) {mid=R; break;}
}
if(mid==-)return ;
return solve(l,mid-)&&solve(mid+,r);
} int main() {
int T;
for(scanf("%d",&T); T--;) {
scanf("%d",&n);
for(int i=; i<n; ++i)scanf("%d",&a[i]);
disc(a,n);
memset(last,-,sizeof last);
for(int i=; i<n; ++i) {
pre[i]=last[a[i]],last[a[i]]=i,nxt[i]=n;
if(~pre[i])nxt[pre[i]]=i;
}
puts(solve(,n-)?"non-boring":"boring");
}
return ;
}

UVA - 1608 Non-boring sequences (分治,中途相遇法)的更多相关文章

  1. uva 6757 Cup of Cowards(中途相遇法,貌似)

    uva 6757 Cup of CowardsCup of Cowards (CoC) is a role playing game that has 5 different characters (M ...

  2. UVa 1326 - Jurassic Remains(枚举子集+中途相遇法)

    训练指南p.59 #include <cstdio> #include <cstring> #include <cstdlib> #include <map& ...

  3. 紫书 例题8-3 UVa 1152(中途相遇法)

    这道题要逆向思维, 就是求出答案的一部分, 然后反过去去寻找答案存不存在. 其实很多其他题都用了这道题目的方法, 自己以前都没有发现, 这道题专门考这个方法.这个方法可以没有一直往下求, 可以省去很多 ...

  4. 紫书 习题 8-16 UVa 1618 (中途相遇法)

    暴力n的四次方, 然而可以用中途相遇法的思想, 分左边两个数和右边两个数来判断, 最后合起来判断. 一边是n平方logn, 合起来是n平方logn(枚举n平方, 二分logn) (1)两种比较方式是相 ...

  5. 【uva 1152】4 Values Whose Sum is Zero(算法效率--中途相遇法+Hash或STL库)

    题意:给定4个N元素几个A,B,C,D,要求分别从中选取一个元素a,b,c,d使得a+b+c+d=0.问有多少种选法.(N≤4000,D≤2^28) 解法:首先我们从最直接最暴力的方法开始思考:四重循 ...

  6. LA 2965 Jurassic Remains (中途相遇法)

    Jurassic Remains Paleontologists in Siberia have recently found a number of fragments of Jurassic pe ...

  7. HDU 5936 Difference 【中途相遇法】(2016年中国大学生程序设计竞赛(杭州))

    Difference Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  8. 【中途相遇法】【STL】BAPC2014 K Key to Knowledge (Codeforces GYM 100526)

    题目链接: http://codeforces.com/gym/100526 http://acm.hunnu.edu.cn/online/?action=problem&type=show& ...

  9. 高效算法——J 中途相遇法,求和

    ---恢复内容开始--- J - 中途相遇法 Time Limit:9000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Su ...

  10. 【UVALive】2965 Jurassic Remains(中途相遇法)

    题目 传送门:QWQ 分析 太喵了~~~~~ 还有中途相遇法这种东西的. 嗯 以后可以优化一些暴力 详情左转蓝书P58 (但可能我OI生涯中都遇不到正解是这个的题把...... 代码 #include ...

随机推荐

  1. JSP页面传递参数乱码问题整理

    1.JSP页面之间传递中文参数乱码 (1).a.jsp中正常传递参数,b.jsp 中 <% String projectName = new String(request.getParamete ...

  2. eclipse(1)----ubuntu下的安装与配置

    eclipse的安装与配置 1.eclipse官网下载,最新版本eclipse-jee-oxygen-3-linux-gtk-x86_64.tar.gz 2.tar包存在~/Download/下,解压 ...

  3. Boostrap常用组件英文名

    dropdownlisttabsearchVertical TabSidebar with tabssidebarExpandable Panel ListFiltered Attendees Lis ...

  4. HackerRank - fibonacci-modified 【大数】

    思路 用PYTHON 或 JAVA 干掉 AC代码 a, b, n = map(int, input().split()) for i in range (2, n, 1) : temp = b b ...

  5. 20145231《Java程序设计》课程总结

    20145231 <Java程序设计>课程总结 每周读书笔记链接汇总 ● 20145231<Java程序设计>第一周学习总结 ●20145231<Java程序设计> ...

  6. INSPIRED启示录 读书笔记 - 第29章 大公司如何创新

    大公司实现创新的方法 20%法则:谷歌的程序员有20%的工作时间可以用来从事创新研究,这个方法最早是从施乐帕克研究所学来的.20%法则鼓励普通员工自己尝试各种想法,让员工打心底愿意倾注更多的激情和汗水 ...

  7. unbunto关闭触摸屏

    sudo rmmod psmouse 这个是禁用的 sudo modprobe psmouse 这个是启用的

  8. HDU 2603 二分匹配

    #include <queue>#include <vector>#include <cstdio>#include <cstring>#include ...

  9. Mybatis入门2-动态代理实现CRUD

    MyBatis动态代理生成DAO的步骤: 1) 编写数据管理的接口XxxMapper 2) 编写该接口对应的Mapper.xml a) namespace必须与Mapper接口全名一致 b) stat ...

  10. mysql服务性能优化 my.cnf my.ini配置说明详解(16G内存)

    sort_buffer_size,join_buffer_size,read_buffer_size参数对应的分配内存也是每个连接独享 这配置已经优化的不错了,如果你的mysql没有什么特殊情况的话, ...