Josif_tepe

Untitled

Feb 25th, 2026
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.43 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <map>
  4. #include <stack>
  5. //#include <bits/stdc++.h>
  6. using namespace std;
  7.  
  8. typedef long long ll;
  9. const ll MOD = 1e9 + 7;
  10. int main()
  11. {
  12.     ios_base::sync_with_stdio(false);
  13.     int n;
  14.     cin >> n;
  15.    
  16.     vector<int> v(n);
  17.    
  18.     for(int i = 0; i < n; i++) {
  19.         cin >> v[i];
  20.     }
  21.    
  22.     vector<int> left(n, -1);
  23.     vector<int> right(n, n);
  24.    
  25.     stack<int> st;
  26.     for(int i = 0; i < n; i++) {
  27.         while(!st.empty() and v[st.top()] > v[i]) {
  28.             st.pop();
  29.         }
  30.        
  31.         if(st.empty()) {
  32.             left[i] = -1;
  33.         }
  34.         else {
  35.             left[i] = st.top();
  36.         }
  37.        
  38.         st.push(i);
  39.     }
  40.    
  41.     stack<int> st2;
  42.     for(int i = n - 1; i >= 0; i--) {
  43.         while(!st2.empty() and v[st2.top()] > v[i]) {
  44.             st2.pop();
  45.         }
  46.         if(st2.empty()) {
  47.             right[i] = n;
  48.         }
  49.         else {
  50.             right[i] = st2.top();
  51.         }
  52.        
  53.         st2.push(i);
  54.     }
  55.    
  56.     ll total_subarrays = (ll)n * (ll)(n + 1) / 2;
  57.     total_subarrays %= MOD;
  58.    
  59.     ll bad_subarrays = 0;
  60.     for(int i = 0; i < n; i++) {
  61.         ll L = i - left[i];
  62.         ll R = right[i] - i;
  63.        
  64.         bad_subarrays += ((L * R) % MOD);
  65.         bad_subarrays %= MOD;
  66.     }
  67.    
  68.     cout << (total_subarrays - bad_subarrays) % MOD << endl;
  69.    
  70.    
  71.    
  72.     return 0;
  73. }
  74.  
Advertisement
Add Comment
Please, Sign In to add comment