牛客练习赛44 A:小y的序列(模拟)
链接:https://ac.nowcoder.com/acm/contest/634/A
来源:牛客网
题目描述
小y有一块长度为n的布匹。颜色全部为0。他要给这个布匹染色。他总共有m种染料。小y认为一种染料用多次是不和谐的。所以每种染料会被用刚好一次。也就是说小y要给这块布匹染m次色。第i次会把Li到Ri这个区间染成颜色i。现在给出最终布匹每段的颜色。请你输出一种染色方案。数据保证有解
输入描述:
输入共两行。
第一行两个个正整数n,m,表示布匹的长度和染料的数量
第二行n个用空格隔开的正整数,第i个数字ai
输出描述:
输出m行。
第i行包含两个正整数Li,Ri,表示第i次染色的区间。
示例1
输入
3 3
1 2 3
输出
1 3
2 3
3 3
备注:
1≤n,m≤10^5
0≤ai≤m
1≤Li≤Ri≤n
解题思路:
更新每一个颜色的左右边界,如果没有发现某一个颜色,把它放到最后一个颜色可以覆盖的地方。
#include <stdio.h>
#include <algorithm>
using namespace std;
#define N 100020
int l[N],r[N];
int main()
{
int n,m,i,x;
scanf("%d%d", &n, &m);
for(i=1; i<=n; i++)
{
scanf("%d", &x);
if(l[x] == 0)
l[x] = i;
r[x] = i;
}
for(i=m; i>=1; i--)
if(r[i])
{
x = r[i];
break;
}
for(i=1; i<=m; i++)
if(l[i])
printf("%d %d\n", l[i] , r[i]);
else
printf("%d %d\n", x, x);
return 0;
}