Advertisement
deushiro

Untitled

Feb 23rd, 2020
270
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.48 KB | None | 0 0
  1. #include <cmath>
  2. #include <iostream>
  3. #include <vector>
  4. #include <algorithm>
  5. #include <string>
  6. #include <set>
  7. #include <map>
  8. #include <list>
  9. #include <time.h>
  10. #include <math.h>
  11. #include <random>
  12. #include <deque>
  13. #include <queue>
  14. #include <cassert>
  15. #include <unordered_map>
  16. #include <unordered_set>
  17. #include <iomanip>
  18. #include <bitset>
  19. #include <sstream>
  20. #include <chrono>
  21. #include <cstring>
  22.  
  23. using namespace std;
  24.  
  25. #define rep(i,a,n) for (int i=a;i<n;i++)
  26. #define fi first
  27. #define se second
  28. #define pb push_back
  29. #define mp make_pair
  30. #define sz(x) ((int)(x).size())
  31. #define all(x) (x).begin(),(x).end()
  32. #define PI 3.14159265358979323846
  33.  
  34. typedef long long ll;
  35. typedef long double ld;
  36.  
  37. void fastIO() {
  38.     ios_base::sync_with_stdio(false);
  39.     cin.tie(0);
  40.     cout.tie(0);
  41. }
  42.  
  43. int n;
  44. vector<ll> a;
  45.  
  46.  
  47. int main() {
  48.     fastIO();
  49.     cin >> n;
  50.     a.resize(n);
  51.     for (int i = 0; i < n; ++i) {
  52.         cin >> a[i];
  53.     }
  54.     vector<ll> pr(n);
  55.     vector<ll> sf(n);
  56.     pr[0] = a[0];
  57.     sf.back() = a.back();
  58.     for (int i = 1; i < n; ++i) {
  59.         pr[i] = min(a[i], pr[i - 1]);
  60.     }
  61.     for (int i = n - 2; i >= 0; --i) {
  62.         sf[i] = min(sf[i], sf[i + 1]);
  63.     }
  64.     int maxi = 0;
  65.     ll ans = -1;
  66.     for (int i = 0; i < n; ++i) {
  67.         ll m = a[i];
  68.         ll x = a[i];
  69.         for (int j = i - 1; j >= 0; --j) {
  70.             m += min(x, a[j]);
  71.             x = min(x, a[j]);
  72.         }
  73.         x = a[i];
  74.         for (int j = i + 1; j < n; ++j) {
  75.             m += min(x, a[j]);
  76.             x = min(x, a[j]);
  77.         }
  78.         if (m > ans) {
  79.             ans = m;
  80.             maxi = i;
  81.         }
  82.     }
  83.     ll ans1 = 0;
  84.     ll ans2 = 0;
  85.     for (int i = 0; i < n; ++i)
  86.         ans1 += pr[i];
  87.     for (int i = 0; i < n; ++i) {
  88.         ans2 += sf[i];
  89.     }
  90.     vector<ll> res(n);
  91.     if (ans > ans1 && ans > ans2) {
  92.         res[maxi] = a[maxi];
  93.         for (int i = maxi - 1; i >= 0; --i) {
  94.             res[i] = min(a[i], res[i + 1]);
  95.         }
  96.         for (int i = maxi + 1; i < n; ++i) {
  97.             res[i] = min(a[i], res[i - 1]);
  98.         }
  99.         rep(i, 0, n) {
  100.             cout << res[i] << " ";
  101.         }
  102.         cout << endl;
  103.         return 0;
  104.     }
  105.     if (ans1 >= ans2) {
  106.         rep(i, 0, n) {
  107.             cout << pr[i] << " ";
  108.         }
  109.         cout << endl;
  110.         return 0;
  111.     }
  112.     else {
  113.         rep(i, 0, n) {
  114.             cout << sf[i] << " ";
  115.         }
  116.         cout << endl;
  117.         return 0;
  118.     }
  119.    
  120. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement