Source Code
#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define sz(s)    (int)(s.size())
#define endl "\n"
#define BI acos(-1)
#define all(a) a.begin(), a.end()

void Open() {
#ifndef ONLINE_JUDGE
#endif  !ONLINEJUDGE
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
}
int dx[]{ 1, -1, 0, 0, 1, 1, -1, -1 };
int dy[]{ 0, 0, 1, -1, 1, -1, 1, -1 };
const int OO = 0x3f3f3f3f;

int main()
{
    Open();
    int n;
    cin >> n;
    vector<ll>a(n), b,c;
    map<ll, int>mp;
    vector<ll>sor;
    ll s_n = 0;
    for (int i = 0; i < n; i++)
    {
        cin >> a[i];
    }
    bool p = 0;
    ll w = 0;
    while (a.size()&&a.back() <= 0)
    {
        w += a.back();
        a.pop_back();
    }
    //cout << w << endl;
    if (sz(a) != n)
    {
        bool pp = 0;
        for (int i = 0; i < sz(a); i++)
        {
            if (a[i] <= 0)
            {
                pp = 1;
                a[i] += w;
                break;
            }
        }
        if (!pp||sz(a) == 0)a.push_back(w);
    }
    n = sz(a);
    for (int i = n-1; i >=0 ; i--)
    {       
        if (a[i] <= 0 )s_n += a[i];
    }
    p = 1;
    ll ss = 0;
    for (int i = 0; i < n; i++)
    {
        if (a[i] <= 0)
        {
            if (!p)continue;
            sor.push_back(s_n);
            b.push_back(s_n);
            mp[s_n]++;
            p = 0;
        }
        else
        {
            if (!mp[a[i]])
                sor.push_back(a[i]);
            b.push_back(a[i]);
            mp[a[i]]++;
        }
    }
    /*for (auto it : b)cout << it << ' ';
    cout << endl;
    for (auto it : sor)cout << it << ' ';
    cout << endl;*/
    sort(all(sor));
    reverse(all(sor));
    ll s = 0;
    if (sor[0] <= 0)
    {

        for (int i = 0; i < n; i++)s += a[i];
        cout << s;
        return 0;
    }
    //cout << endl;
    for (int i = 0; i < sz(b)-1; i++)
    {
        while (!sor.empty()&&mp[sor.back()] == 0)
        {
            sor.pop_back();
        }
        if (sor.back() == b.back() && mp[sor.back()] == 1)sor.pop_back();
        if (b[i] != sor.back())
        {
            s += b[i];
            mp[a[i]]--;
        }
        else
        {
            c.push_back(b[i]);
            mp[b[i]]--;
        }
    }
    if (b.back() <= 0)
    {
        if(c.size())
        c.front() += b.back();
        else
        {
            c.push_back(b.back());
        }
        c.back() += s;

    }
    else
    {
        c.push_back(b.back() + s);
    }
    for (auto it : c)cout << it << ' ';
}
Copy
a Ramy
GNU G++17
1 ms
520 KB
Wrong Answer