1 条题解

  • 0
    @ 2025-7-20 14:12:22

    O(n)

    答案是 min(a1,a2)+a1min(a_1,a_2)+a_1

    如果是 a1>a2a_1>a_2 ,我们可以用 i=1i=1j=2j=2 执行操作,这样索引 22 之后的前缀最小值总是 00 ,从而得到答案 a1+a2a_1+a_2

    如果是 a1<a2a_1<a_2 ,我们可以用 i=2i=2j=3j=3 进行运算。由于 a1<a2,min(a1,a2)=a1a_1<a_2, min(a_1,a_2)=a_1 .索引 33 及之后的前缀最小值将为 00 。我们应该小心边缘情况 n=2n=2 ,因为没有索引 33 可以使用。但是,如果出现 n=2n=2 ,我们可以干脆不执行操作。

    #include<bits/stdc++.h>
    
    using namespace std;
    
    typedef long long LL;
    typedef pair<LL, LL> PII;
    
    #define x first
    #define y second
    
    const int N = 2e5 + 10, mod = 1e9 + 7;
    
    LL a[N], b[N];
    
    void solve()
    {
        int n;
        cin >> n;
        for(int i = 1; i <= n; i ++) cin >> a[i];
        cout << min(a[1] + a[2], a[1] * 2) << endl;
    }
    
    int main()
    {
        int t = 1;
        scanf("%d", &t);
        while(t --)
            solve();
    }
    
    • 1

    信息

    ID
    386
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    递交数
    19
    已通过
    8
    上传者