Advertisement
deushiro

Untitled

Feb 24th, 2020
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.75 KB | None | 0 0
  1.  
  2. #include <algorithm>
  3. #include <iostream>
  4. #include <set>
  5. #include <stdlib.h>
  6. #include <algorithm>
  7. #include <iostream>
  8. #include <iterator>
  9. #include <vector>
  10. #include <set>
  11. #include <string>
  12. #include <fstream>
  13. #include <list>
  14. #include <numeric>
  15. #include <random>
  16. #include <queue>
  17.  
  18. using namespace std;
  19.  
  20. #define rep(i,a,n) for (int i=a;i<n;i++)
  21. #define fi first
  22. #define se second
  23. #define pb push_back
  24. #define mp make_pair
  25. #define sz(x) ((int)(x).size())
  26. #define all(x) (x).begin(),(x).end()
  27. #define PI 3.14159265358979323846
  28.  
  29. typedef long long ll;
  30. typedef long double ld;
  31.  
  32. void fastIO() {
  33.     ios_base::sync_with_stdio(false);
  34.     cin.tie(0);
  35.     cout.tie(0);
  36. }
  37.  
  38. int n;
  39. vector<ll> lsr;
  40. vector<ll> lsl;
  41. vector<ll> a;
  42. vector<ll> dpl;
  43. vector<ll> dpr;
  44.  
  45.  
  46. void calc() {
  47.     vector<int> st;
  48.     for (int i = 0; i <= n + 1; ++i) {
  49.         while (!st.empty() && a[i] <= a[st.back()]) {
  50.             st.pop_back();
  51.         }
  52.         if (st.empty()) {
  53.             lsl[i] = -1;
  54.         }
  55.         else {
  56.             lsl[i] = st.back();
  57.         }
  58.         st.push_back(i);
  59.     }
  60.     st.clear();
  61.     for (int i = n + 1; i >= 0; --i) {
  62.         while (!st.empty() && a[i] <= a[st.back()]) {
  63.             st.pop_back();
  64.         }
  65.         if (st.empty()) {
  66.             lsr[i] = n + 2;
  67.         }
  68.         else {
  69.             lsr[i] = st.back();
  70.         }
  71.         st.push_back(i);
  72.     }
  73. }
  74.  
  75.  
  76. void solve() {
  77.     for (int i = 1; i <= n; ++i) {
  78.         dpl[i] = a[i] * (i - lsl[i]) + dpl[lsl[i]];
  79.     }
  80.     for (int i = n; i >= 1; --i) {
  81.         dpl[i] = a[i] * (lsr[i] - i) + dpr[lsr[i]];
  82.     }
  83. }
  84.  
  85.  
  86. int main() {
  87.     fastIO();
  88.     cin >> n;
  89.     a.resize(n + 2);
  90.     lsl.resize(n + 2);
  91.     lsr.resize(n + 2);
  92.     dpl.resize(n + 1);
  93.     dpr.resize(n + 1);
  94.     rep(i, 1, n + 1) {
  95.         cin >> a[i];
  96.     }
  97.     calc();
  98.     rep(i,1,n + 1) {
  99.         cout << dpl[i] << " ";
  100.     }
  101.     cout << endl;
  102.     rep(i, 1, n + 1) {
  103.         cout << lsr[i] << " ";
  104.     }
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement