C. Restore the Array - 构造 + 思维

发布时间 2023-04-25 22:51:18作者: Yaowww

题意:

  对于长度为n的数组a,存在长度为n-1的数组b有b[i]=max(a[i],a[i+1]),t组测试数据,给出n和b数组,构造a数组。

分析:

  对b数组相邻两元素反过来求最小值,看了codeforces中题解证明感觉很明了。有以下三种分类:

  1. a[1] = b[1]

  2.a[i]=min(b[i-1,b[i])

  3.a[n-1]=b[n-1]

代码:

#include <bits/stdc++.h>

#define endl '\n'

using namespace std;

const int N=2e5+10;

int b[N];
vector<int> a;

void solve()
{
    int t;
    cin>>t;
    while(t--)
    {
        a.clear();
        int n;
        cin>>n;
        for(int i=0;i<n-1;i++) cin>>b[i];
        a.push_back(b[0]);
        for(int i=1;i<n-1;i++) a.push_back(min(b[i-1],b[i]));
        a.push_back(b[n-2]);
        for(int i=0;i<a.size();i++) cout<<a[i]<<' ';
        cout<<'\n';
    }
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    
    solve();
    
    return 0;
}