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. 24、CSS定位

    CSS定位方法 driver.find_element_by_css_selector() 1.CSS定位常用策略(方式) 1.id选择器 说明:根据元素id属性来选择 格式:#id 如:#userA ...

  2. Spring提供的iBatis的SqlMap配置

    1.    applicationContext.xml <!-- Spring提供的iBatis的SqlMap配置--> <bean id="sqlMapClient&q ...

  3. Mac nginx 配置

    nginx 安装: 在苹果系统下如果要安装nginx,首先要安装brew.安装brew可以查看网站:https://brew.sh: 一条命令即可搞定:/usr/bin/ruby -e "$ ...

  4. 【转载】WebDriver(C#)之十点使用心得

    使用Selenium WebDriver驱动浏览器测试的过程中多多少少会遇到一些折腾人的问题,总结了一部分,做下分享. 一.隐藏元素处理(element not visible) 使用WebDrive ...

  5. Tutorial 5: Relationships & Hyperlinked APIs

    转载自:http://www.django-rest-framework.org/tutorial/5-relationships-and-hyperlinked-apis/ Tutorial 5: ...

  6. go语言入门(二)

    Go 语言变量 Go 语言变量名由字母.数字.下划线组成,其中首个字母不能为数字. 声明变量的一般形式是使用 var 关键字: var identifier type 变量声明 第一种,指定变量类型, ...

  7. Windows Phone 8/Windows 8 启动第三方应用程序并传递参数

    需要被其他应用启动的第三方应用需要注册protocol association,当一个应用程序启动一个特殊的URI的时候,那么注册了这个protocol的程序会自动启动,并且可以通过这个特殊的URI将 ...

  8. Linux上java环境变量配置

    1.java配置 配置环境变量在/etc/profile下增加 # set Java environment JAVA_HOME=/usr/share/jdk1.6.0_43 PATH=$JAVA_H ...

  9. [MySQL]You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column

    执行update语句,出现问题: 问题描述: You are using safe update mode and you tried to update a table without a WHER ...

  10. Web开发:URL编码与解码

    通常如果一样东西需要编码,说明这样东西并不适合传输.原因多种多样,如Size过大,包含隐私数据,对于Url来说,之所以要进行编码,是因为Url中有些字符会引起歧义. 例如Url参数字符串中使用key= ...