zoukankan      html  css  js  c++  java
  • 牛客练习赛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
    ", l[i] , r[i]);
            else
            	printf("%d %d
    ", x, x);
        return 0;
    }
  • 相关阅读:
    点分治 (等级排) codeforces 321C
    树上点分治 poj 1741
    判断点在直线的左侧还是右侧
    树的重心
    链式前向星
    树上点的分治
    构造 素数
    二进制 + 模拟
    枚举 + 三分 (游标)
    枚举 + 三分
  • 原文地址:https://www.cnblogs.com/zyq1758043090/p/11852744.html
Copyright © 2011-2022 走看看