今天比赛的时候做的一个坑题。深坑啊。

题目意思是给你一个有n个数的数字序列。要你判断对于这个序列是都满足任意一个子序列都至少含有一个只出现一次的数字。

看完题目后没什么思路,一直以为要用线段树,每次删除一个点,然后更新,后来发现wa了,算法有问题。

后来殷犇讲了一种水过去的方法,听完后瞬间就水过了。

其实我们可以这样去做,对于数组中的每个数,我们建立一个指针指向这个数字下一次在数组中出现的位置。

然后核心的水的地方来了,如果我们已知一个区间中存在某一个数字只出现一次,假设区间为[l,r],这个只出现一次的数字的位置为x,那么我们只要去验证[l,x-1]和[x+1,r]是否分别满足即可。

同时为了水得更加有质量,我们在扫描的时候我们可以进行一点点优化,就是每次左边扫一个数,右边扫一个数,这样就过了噢。

其实我们可以论议论时间复杂度。当那个单独出现的数字靠近两边的时候我们可以迅速地找出来;当那个单独出现的数字出现在越中间,我们能把区间更加平分,这样时间也能降低下来哦。

总的来说今天还是学到了一种很好的水题的方法。orz!。

下面上代码:

Vie

#include <iostream>
#include <cstdio>
#include <cstring>
#include <map>
#define maxn 200200
using namespace std; int n1[maxn],n2[maxn],a[maxn],n,m,t;
map<int,int> ss; bool check(int l,int r)
{
if (l>=r) return true;
for (int i=; i<=(r-l+)/; i++)
{
if (n1[l+i]>r && n2[l+i]<l) return check(l,l+i-)&check(l+i+,r);
if (n1[r-i]>r && n2[r-i]<l) return check(l,r-i-)&check(r-i+,r);
}
return false;
} int main()
{
scanf("%d",&t);
while (t--)
{
scanf("%d",&n);
for (int i=;i<=n; i++) scanf("%d",&a[i]),n1[i]=n+,n2[i]=;
ss.clear();
for (int i=; i<=n; i++)
{
n2[i]=ss[a[i]],n1[n2[i]]=i;
ss[a[i]]=i;
}
if (check(,n)) printf("non-boring\n");
else printf("boring\n");
}
return ;
}

Problem D - Non-boring sequences——Contest1004 - National Day Training Contest -- Day3的更多相关文章

  1. HDU 6343.Problem L. Graph Theory Homework-数学 (2018 Multi-University Training Contest 4 1012)

    6343.Problem L. Graph Theory Homework 官方题解: 一篇写的很好的博客: HDU 6343 - Problem L. Graph Theory Homework - ...

  2. 2015 Multi-University Training Contest 3 hdu 5324 Boring Class

    Boring Class Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  3. 2018 Multi-University Training Contest 4 Problem E. Matrix from Arrays 【打表+二维前缀和】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6336 Problem E. Matrix from Arrays Time Limit: 4000/20 ...

  4. 2018 Multi-University Training Contest 4 Problem J. Let Sudoku Rotate 【DFS+剪枝+矩阵旋转】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6341 Problem J. Let Sudoku Rotate Time Limit: 2000/100 ...

  5. 2018 Multi-University Training Contest 4 Problem K. Expression in Memories 【模拟】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6342 Problem K. Expression in Memories Time Limit: 200 ...

  6. 2018 Multi-University Training Contest 4 Problem L. Graph Theory Homework 【YY】

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6343 Problem L. Graph Theory Homework Time Limit: 2000 ...

  7. 2018 Multi-University Training Contest 4 Problem B. Harvest of Apples 【莫队+排列组合+逆元预处理技巧】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6333 Problem B. Harvest of Apples Time Limit: 4000/200 ...

  8. 2018 Multi-University Training Contest 3 Problem F. Grab The Tree 【YY+BFS】

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6324 Problem F. Grab The Tree Time Limit: 2000/1000 MS ...

  9. HDU 2018 Multi-University Training Contest 3 Problem A. Ascending Rating 【单调队列优化】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6319 Problem A. Ascending Rating Time Limit: 10000/500 ...

随机推荐

  1. pwd命令的实现

    pwd 命令描述 Linux中用 pwd 命令来查看"当前工作目录"的完整路径. 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录. 在不太确定当前位置时,就会使用pwd ...

  2. 20155334 实验二 Java面向对象程序设计

    实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验要求 完成实验.撰写 ...

  3. Java读取Propertity文件

    读取propertity 文件其实很简单,就是每次容易搞错文件路径,今天刚好项目又用到了,顺便记下来,以便以后参考: 目录如下: 代码如下: package com.infs.exam.process ...

  4. autoreleasepool 自动释放池的理解

    常见的面试题:以下代码存在什么样的问题?应该如何改进? for (int i = 0; i < 100000; i++) { NSString *str = @"abc"; ...

  5. springboot入门之一:环境搭建

    springboot简介 springboot做为微服务的开发集合框架,有着天然的好处,它不像springmvc那样笨重繁杂,springmvc众多的配置使得开发人员很厌烦,为解决众多的配置带来的烦扰 ...

  6. selenium webdriver API详解(三)

    本系列主要讲解webdriver常用的API使用方法(注意:使用前请确认环境是否安装成功,浏览器驱动是否与谷歌浏览器版本对应) 一:获取页面元素的文本内容:text 例:获取我的博客名字文本内容 代码 ...

  7. spring 属性文件加载接口---PropertySourceLoader

    org.springframework.boot.config Interface PropertySourceLoader 实现类: PropertiesPropertySourceLoader, ...

  8. 第k小分数(二分值)

    //时间限制:10000ms //单点时限:1000ms //内存限制:256MB //描述 //给定N个不同的质数P1, P2, … PN.用它们作为分目可以组成(P1-1) + (P2-1) + ...

  9. 不相交集合ADT -数据结构(C语言实现)

    读数据结构与算法分析 不相交集合 等价关系 满足三个性质 - 自反性 - 对称性 - 传递性 基本数据结构 基本思路 使用一个数组,下标表示该集合,内容表示指向的父亲 实现 类型声明 typedef ...

  10. grunt requireJS 的基础配置

    module.exports = function(grunt){ //grunt的配置我就不叨叨了 自己看官网就ok了 //我就介绍下grunt的依赖插件grunt-contrib-requirej ...