4780: [Usaco2017 Open]Modern Art 2

Time Limit: 10 Sec  Memory Limit: 128 MB

Description

Having become bored with standard 2-dimensional artwork (and also frustrated at others copying her w
ork), the great bovine artist Picowso has decided to switch to a more minimalist, 1-dimensional styl
e.Although, her paintings can now be described by a 1-dimensional array of colors of length N(1≤N≤
100,000), her painting style remains unchanged: she starts with a blank canvas and layers upon it a 
sequence of "rectangles" of paint, which in this 1-dimensional case are simply intervals. Sheuses ea
ch of the colors 1…Nexactly once, although just as before, some colors might end up being completel
y covered up by the end.To Picowso's great dismay, her competitor Moonet seems to have figured out h
ow to copy even these 1-dimensional paintings, using a similar strategy to the preceding problem: Mo
onet will paint a set ofdisjoint intervals, wait for them to dry, then paint another set of disjoint
 intervals, and so on.Moonet can only paint at most one interval of each color over the entire proce
ss. Please compute thenumber of such rounds needed for Moonet to copy a given 1-dimensional Picowso 
painting.
伟大的牛艺术家皮科沃已经厌倦了标准的二维艺术作品,也在伤心其他人复制她的作品,她决定转向更简约,一维
的风格。尽管如此,她的作品现在可以表示描述颜色的一维数组长度N(1≤N≤100000),她的绘画风格没有改变:她
以一个空白的画布开始,一次涂色只能涂上连续几个单位的颜料,同样新的颜料可以完全覆盖旧的颜料,每次涂完
要等上1day才能完全干,只有旧颜料干了以后才能用新颜料覆盖。皮科沃十分沮丧的是,她的对手Moonet似乎已经
找到了如何复制这些一维的绘画,使用类似的策略。前面的问题:Moonet会画几组不相交区间,等待他们干,然后
画几组不相交区间,等等。Moonet同一种颜色只能使用一次。请计算该轮Moonet复制一个给定的一维picowso绘画
所需要的时间。
 
 

Input

The first line of input contains N, and the next N lines contain an integer in the range 0…N
indicating the color of each cell in the 1-dimensional painting (0 for a blank cell).
第一行为N,画条长度
从第2行至N行每行一个数表示要涂颜色
 

Output

Please output the minimum number of rounds needed to copy this painting, or -1 if this could not hav
e possibly been an authentic work of Picowso (i.e., if she could not have painted it using a layered
 sequence of intervals, one of each color).
输出一个整数表示最少天数。数据若不合法则输出-1
 
 

Sample Input

7
0
1
4
5
1
3
3

Sample Output

2
In this example, the interval of color 1 must be painted in an earlier round than the intervals of c
olors 4 and 5, so at least two rounds are needed.

HINT

我们可以记录一下每种颜色最早和最晚出现的地方fst,lst,这样如果有合法答案,那每次覆盖 fst~lst 一定是可行的,然后似乎就可以搞括号序列,维护深度了

但这里有一个问题,就是直接搞的话可能会出错,网上的一些题解也可能忽略了这个问题

可能会有这样一组数据

1 2 2 1 2 2 1

实际输出会是-1,但可能会输出2

所以我们需要扫一遍整个数组,并维护一个栈,当当前点是fst时,我们将他压入栈内,是lst时弹出

但如果既不是fst,也不等于栈顶的颜色的话就无解,因为这个点一定被栈顶颜色所在区间包含

而他对应颜色的区间并不包含与内,所以要想满足,这个点就至少被染色两次

这样就维护栈的最大size就好

#include<map>
#include<cmath>
#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define inf 1000000007
#define ll long long
#define N 100010
inline int rd()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
int n,c[N],fst[N],lst[N],q[N],tot,mx;
int main()
{
n=rd();
for(int i=;i<=n;i++)
{
c[i]=rd();
if(!fst[c[i]]) fst[c[i]]=i;
lst[c[i]]=i;
}
c[n+]=;lst[]=n+;
for(int i=,x;i<=n+;i++)
{
x=c[i];
if(i==fst[x]) q[++tot]=x,mx=max(tot,mx);
if(q[tot]!=x){puts("-1");return ;}
if(i==lst[x]) tot--;
}
printf("%d\n",mx-);
return ;
}

bzoj 4780: [Usaco2017 Open]Modern Art 2的更多相关文章

  1. [BZOJ4776] [Usaco2017 Open]Modern Art(差分 + 思维?)

    传送门 可以预处理出每种颜色的上下左右的位置,这样就框出来了一个个矩形,代表每种颜色分别涂了哪里. 然后用二维的差分. 就可以求出来每个位置至少涂了几次,如果 > 1 的话,就肯定不是先涂的, ...

  2. [Usaco2017 Open]Modern Art 2

    Description Having become bored with standard 2-dimensional artwork (and also frustrated at others c ...

  3. lesson 18 Electric currents in modern art

    lesson18 Electric currents in modern art electricity n. 电力:电流; electric adj. 电的:电动的; electronic adj. ...

  4. 洛谷P3668 [USACO17OPEN]Modern Art 2 现代艺术2

    P3668 [USACO17OPEN]Modern Art 2 现代艺术2 题目背景 小TY的同学HF也想创作艺术 HF只有一块长条状的画布(画条),所以每一次涂色只能涂上连续几个单位的颜料,同样新的 ...

  5. BZOJ 4777: [Usaco2017 Open]Switch Grass

    4777: [Usaco2017 Open]Switch Grass Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 46  Solved: 10[Su ...

  6. BZOJ2368 : Modern Art Plagiarism 树同构

    枚举$T_1$的树根,然后DP,设$f[i][j]$表示$T_1$的子树$i$是否存在包括i的连通子树与$T_2$的子树$j$同构. 若$j$是叶子,那么显然可以. 若$deg_i<deg_j$ ...

  7. 线段树合并 || 树状数组 || 离散化 || BZOJ 4756: [Usaco2017 Jan]Promotion Counting || Luogu P3605 [USACO17JAN]Promotion Counting晋升者计数

    题面:P3605 [USACO17JAN]Promotion Counting晋升者计数 题解:这是一道万能题,树状数组 || 主席树 || 线段树合并 || 莫队套分块 || 线段树 都可以写..记 ...

  8. BZOJ 4756 [Usaco2017 Jan]Promotion Counting(线段树合并)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4756 [题目大意] 给出一棵树,对于每个节点,求其子树中比父节点大的点个数 [题解] ...

  9. BZOJ 4777 Usaco2017 Open Switch Grass Kruskal+替罪羊树+权值线段树

    这道题首先可以看出答案一定是一条边,而且答案一定在最小生成树上,那么我们就可以在这个最小生成树上维护他与异色儿子的边最小值,所以我们就可以已通过Kruskal和一棵平衡树来解决,时间复杂度是O(n*l ...

随机推荐

  1. 1、编写第一个java程序--Hello—World

    1.下载JDK8.0文件 下载网址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.ht ...

  2. phpmywind调用方法大全

    头部文件调用 <?php require_once('header.php'); ?> 底部文件调用 <?php require_once('footer.php'); ?> ...

  3. WordPress404页面自定义

    不知道大家是怎么设计404页面,个性的404可以为网站增色不少,wordpress设置404是在主题里面的404.php页面上,当然比如你用Apache.nginx等服务器,你可以自己建一个单页,内容 ...

  4. Cesium 初始化Viewer

    <pre name="code" class="javascript"><script> var viewer = new Cesium ...

  5. android的wake_lock介绍

    Wake Lock是一种锁的机制, 只要有人拿着这个锁,系统就无法进入休眠, 可以被用户态程序和内核获得. 这个锁可以是有超时的或者是没有超时的, 超时的锁会在时间过去以后自动解锁. 如果没有锁了或者 ...

  6. 20180830 安装git时报错,

    安装:https://blog.csdn.net/u013256816/article/details/54743470 解决问题:https://blog.csdn.net/daojibruce/a ...

  7. bug-bug-bug

    #-*-coding:utf-8-*- import urllib import urllib2 import re import json import threading import reque ...

  8. MINIBASE源代码阅读笔记之buffer manager

    BufDesc frame 们的 descriptor(见BufHashTbl注释),包括 pageNo: 这个 frame 在文件里的id,page number prevframe: -1 表示此 ...

  9. linux中top命令

    经常用到top命令,也就简单看看进程多不多,卡不卡, 这次在网上找到一个归纳总结的,以供参考. 简介 top 命令是 Linux 下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于 ...

  10. 4款Github泄漏敏感信息搜索工具简单比较

    gitrob Ruby开发,支持通过postgresql数据库https://github.com/michenriksen/gitrob weakfilescan Python开发,多线程,猪猪侠开 ...