#381 Div2 Problem C Alyona and mex (思维 && 构造)

题意 : 题目的要求是构造出一个长度为 n 的数列, 构造条件是在接下来给出的 m 个子区间中, 要求每一个子区间的mex值最大, 然后在这 m 个子区间产生的mex值中取最小的输出, 并且输出构造出来的序列, 一个mex值的定义是这个区间没有出现过的最小的正整数, 例如(0, 2, 3)的mex = 1    (0, 1, 2)的mex=3

分析 : 发现在这m个mex值中, 最小的肯定是区间长度最小的, 而且这个mex值肯定是等于这个区间的长度, 记这个mex为Min(mex)所以输出的就是长度最小的区间的长度。那如何构造这个数列呢?根据刚刚讲的我们只要保证在长度最小的区间内包含(0、1、2……len-1)这个递增序列里面的所有数便能保证最小的mex, 而其他区间, 由于长度都大于长度最小的区间, 是不是我们也让这些区间也填满(0、1、2……len-1)这个序列内的数(因为其他的长度都比长度最小的区间的长, 所以一定可以做到!), 那其他的这些区间的mex就都<=Min(mex)。这里有个技巧去完成上面所述的操作, 在第 i 个数, 我们只要填上 i%Min(mex) 实际也就是 i%Min(区间len) 即可!很是巧妙!

#include<bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
int main(void)
{
    int n, m;
    scanf("%d%d", &n, &m);
    int MIN = INF;
    for(int i=0; i<m; i++){
        int l, r;
        scanf("%d%d", &l, &r);
        MIN = min(MIN, r-l+1);
    }
    printf("%d\n", MIN);
    for(int i=0; i<n; i++){///从0或者从1开始都没毛病
        printf("%d ", i%MIN);
    }
    return 0;
}

时间: 2024-10-09 20:21:12

#381 Div2 Problem C Alyona and mex (思维 && 构造)的相关文章

#452 Div2 Problem C Dividing the numbers ( 思维 || 构造 )

题意 : 将从 1 ~ n 的数分成两组,要求两组和的差值尽可能小,并输出其中一组的具体选数情况 分析 : 如果将这 n 个数从大到小四个一组来进行选择的话那么差值就为 0 ,然后再来考虑 n%4 != 0 的情况.举个例子就是 n = 9 的时候,我们考虑 6 7 8 9 ,将6.9放入一组,7.8放入第二组,那么此时差值就会为 0 ,接下来再对 2 3 4 5 进行同样的取法此时差值仍为 0 ,最后剩下一个 1 ,很显然最后的最小差值应当为 1 .其实综合考虑一下 n%4 != 0 的情况只

hdu4671 思维构造

pid=4671">http://acm.hdu.edu.cn/showproblem.php? pid=4671 Problem Description Makomuno has N servers and M databases. All databases are synchronized among all servers and each database has a ordered list denotes the priority of servers to access.

思维/构造 HDOJ 5353 Average

题目传送门 1 /* 2 思维/构造:赛后补的,当时觉得3题可以交差了,没想到这题也是可以做的.一看到这题就想到了UVA_11300(求最小交换数) 3 这题是简化版,只要判断行不行和行的方案就可以了,做法是枚举x[1],x[n]的所有可能,x[2~n-1]能递推出来 4 x[i]表示i给i+1的值(0/-1/1) 那么 a[i] - x[i] + x[i-1] == ave,详细看代码 5 */ 6 /**********************************************

Codeforces Round #381 (Div. 2) Alyona and mex

Alyona's mother wants to present an array of n non-negative integers to Alyona. The array should be special. Alyona is a capricious girl so after she gets the array, she inspects m of its subarrays. Subarray is a set of some subsequent elements of th

B - Alyona and Mex

Description Someone gave Alyona an array containing n positive integers a1, a2, ..., an. In one operation, Alyona can choose any element of the array and decrease it, i.e. replace with any positive integer that is smaller than the current one. Alyona

Problem 1577 - K-th character 小思维题 逆向查找

Problem 1577 - K-th character 题目抽象:给你一个字符串,给你一些操作,每个操作将子串[L,R]反转.所有操作完成后,询问一些位置上的字符. 思路:只需逆向查找就行了. 这样的小思维有时候却想不到. 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <algorithm> 6 usin

Codeforces 777C Alyona and Spreadsheet(思维)

题目链接 Alyona and Spreadsheet 记a[i][j]为读入的矩阵,c[i][j]为满足a[i][j],a[i - 1][j], a[i - 2][j],......,a[k][j]不上升的k的最小值. d[i]为max(c[i][j]) (1 <= j <= m) 那么对于每次询问l,r,若d[r] <= l,那么就符合,反之不符. 因为这里只说名了1 <= nm <= 100000,所以二维数组两个维的大小不确定. 数据可能有n=1, m=100000,

#417 Div2 Problem C Sagheer and Nubian Market (二分 &amp;&amp; std::accumulate)

题意 : 给你 n 件物品和你拥有的钱 S, 接下来给出这 n 件物品的价格, 这些物品的价值不是固定不变的, 价格的变化公式是 a[i]+k*i (i代表第 i 件物品, k 代表你选择买的物品数量, a[i]为物品的底价), 现问你最多能够买多少件物品和所买物品总和, 输出时应该使得所买物品总和尽量小 分析 : 如果我当前能买 k 件物品, 那我肯定能买数量小于 k 的物品, 如果我当前买不起 k 件物品, 那我肯定也不能买比 k 件要多的物品.所以可以考虑二分解法, 在1~n之间二分查找

#415 Div2 Problem C Do you want a data? (math &amp;&amp; 前后缀和 &amp;&amp; 快速幂)

题意: 首先定义集合的F值为  这个集合里面最大值和最小值的差. 现给出一个拥有n个数的集合(没有相同的元素), 要求求出这个集合内所有子集的F的值的和.例如: {4.7}这个集合里面有子集{4}.{7}.{4, 7}, 则这些子集的F值分别为4-4=0.7-7=0.7-4=3, 所以最后的结果就是0+0+3 = 3! 以下分析引用至 : http://blog.csdn.net/dragon60066/article/details/72599167 分析: 不难想到要先使数组升序方便计算和思