B.Beautiful Numbers

Posted pixel-teee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了B.Beautiful Numbers相关的知识,希望对你有一定的参考价值。

题意:你被给予了一个序列 p = [p1, p2, ..., pn](1 ~ n的整数),如果存在l, r左右端点(1 <= l <= r <= n),使得[pl, pl+1,..., pr]是一个1到m的序列,我们就称它为漂亮的。

分析:意思是说如果存在两个端点,里面的数字可以构成1到m且是连续的,那么就称m为漂亮的,标记为1,否则标记为0。
比如[4, 5, 1, 3, 2, 6]的漂亮数字序列是[1, 0, 1, 0, 1, 1]

分析:这个数字m是漂亮的,等价于Posmax - Posmin + 1 = m,Posmax和Posmin意思是说1...m的序列中某个数字所处的最大位置和最小位置且它们之间的距离必须是等于m且连续的
对于每个数字m,我们会采取一种方式更新Posmax, Posmin,假设Posi是一个数字在序列p中的位置,当i == 1时,我们有Posmax = Posmin = Pos1,当m > 1时,Posmax和Posmin可以被如下的公式更新
new_posmax = max(old_posmax, posm);
new_posmin = min(old_posmin, posm);

代码如下:

#include <bits/stdc++.h>

using namespace std;

const int M = 2e5 + 239;

int n, p[M], x;

void solve()
{
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        cin >> x;
        p[x - 1] = i;
    }
    int l = n;
    int r = 0;
    string ans = "";
    for (int i = 0; i < n; i++)
    {
        l = min(l, p[i]);
        r = max(r, p[i]);
        if (r - l == i)
            ans += '1';
        else
            ans += '0';
    }
    cout << ans << "
";
}

int main()
{
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int t;
    cin >> t;
    while (t--)
        solve();
    return 0;
}

以上是关于B.Beautiful Numbers的主要内容,如果未能解决你的问题,请参考以下文章

B - Beautiful Year

[2016-03-08][651][codeforces][B][Beautiful Paintings]

在 SwiftUI 中装饰文本片段的最佳方法是啥?

有没有人知道格式化“缩写”数字的好 javascript 片段?

系统入门深度学习,直击算法工程师m

用最少的代码实现 numbers.Real