Problem D - Non-boring sequences——Contest1004 - National Day Training Contest -- Day3
今天比赛的时候做的一个坑题。深坑啊。
题目意思是给你一个有n个数的数字序列。要你判断对于这个序列是都满足任意一个子序列都至少含有一个只出现一次的数字。
看完题目后没什么思路,一直以为要用线段树,每次删除一个点,然后更新,后来发现wa了,算法有问题。
后来殷犇讲了一种水过去的方法,听完后瞬间就水过了。
其实我们可以这样去做,对于数组中的每个数,我们建立一个指针指向这个数字下一次在数组中出现的位置。
然后核心的水的地方来了,如果我们已知一个区间中存在某一个数字只出现一次,假设区间为[l,r],这个只出现一次的数字的位置为x,那么我们只要去验证[l,x-1]和[x+1,r]是否分别满足即可。
同时为了水得更加有质量,我们在扫描的时候我们可以进行一点点优化,就是每次左边扫一个数,右边扫一个数,这样就过了噢。
其实我们可以论议论时间复杂度。当那个单独出现的数字靠近两边的时候我们可以迅速地找出来;当那个单独出现的数字出现在越中间,我们能把区间更加平分,这样时间也能降低下来哦。
总的来说今天还是学到了一种很好的水题的方法。orz!。
下面上代码:
#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的更多相关文章
- 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 - ...
- 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 ...
- 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 ...
- 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 ...
- 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 ...
- 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 ...
- 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 ...
- 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 ...
- 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 ...
随机推荐
- 学号20155308 2016-2017-2 《Java程序设计》实验一(Java开发环境的熟悉)实验报告
学号20155308 2016-2017-2 <Java程序设计>实验一(Java开发环境的熟悉)实验报告 一.实验要求 使用JDK编译.运行简单的Java程序. 使用IDEA 编辑.编译 ...
- 20155334 实验四:Android程序设计
20155334实验四:Android程序设计 实验内容 基于Android Studio开发简单的Android应用并部署测试; 了解Android组件.布局管理器的使用: 掌握Android中事件 ...
- day 8 递归
版本1) 求5!while # 5! = 5*4*3*2*1 # 4!= 4*3*2*1 i = 1 result = 1 while i <= 5: result = result * i ...
- Luogu1445 [Violet]樱花
题面 题解 $$ \frac 1x + \frac 1y = \frac 1{n!} \\ \frac{x+y}{xy}=\frac 1{n!} \\ xy=n!(x+y) \\ xy-n!(x+y) ...
- 搭建 ssm 环境
<!-- 引入外部jdbc配置文件 --> <context:property-placeholder location="classpath:dbconfig.prope ...
- 读懂UML类图
平时阅读一些远吗分析类文章或是设计应用架构时没少与UML类图打交道.实际上,UML类图中最常用到的元素五分钟就能掌握,下面赶紧来一起认识一下它吧: 一.类的属性的表示方式 在UML类图中,类使用包含类 ...
- UTF-8编码下'\u7528\u6237'转换为中文汉字'用户'
UTF-8编码下'\u7528\u6237'转换为中文'用户' 一.前言 有过多次,在开发项目中遇见设置文件编码格式为UTF-8,但是打开该文件出现类似\u7528这样的数据,看也看不懂,也不是平常见 ...
- Nginx快速入门
本文主要介绍nginx的基本配置和操作,并介绍了一些可以完成的简单任务. 假设您已经学习过并已经安装好了nginx服务器. 如果没有,请参阅安装nginx页面(http://www.yiibai.co ...
- JavaScript学习笔记(五)——类型、转换、相等、字符串
第六章 类型 相等 转换等 一.类型 1 typeof(); typeof是一个内置的JavaScript运算符,可用于探测其操作数的类型. 例: <script language=" ...
- 首次使用windows管理界面访问安装在UNIX或linux下的DP服务器时提示无权限访问的解决方法
用windwos GUI管理界面连接时提示无权限访问: 在/etc/opt/omni/server/users/userlist 添加一行: "" "*" &q ...