Advertisement
Ankit_132

D

Apr 13th, 2024
990
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.53 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define ll     long long
  5. #define _test   int _TEST; cin>>_TEST; while(_TEST--)
  6. #define ff     first
  7. #define ss     second
  8. #define pb     push_back
  9.  
  10. vector<pair<int, int>> op;
  11.  
  12. void func2(vector<int>& a, int l, int r)
  13. {
  14.     if (l == r)
  15.     {
  16.         if (a[l] != 0)
  17.     {
  18.             op.push_back({l, l});
  19.             a[l] = 0;
  20.         }
  21.         return;
  22.     }
  23.  
  24.     func2(a, l + 1, r);
  25.     if (a[l] != r - l)
  26.     {
  27.         op.push_back({l, r});
  28.         for (int i = l; i <= r; i++)
  29.             a[i] = r - l;
  30.  
  31.         func2(a, l + 1, r);
  32.     }
  33. }
  34.  
  35. void func(vector<int>& a, int l, int r) {
  36.     int s = 0;
  37.     for (int i = l; i <= r; i++)
  38.         s += a[i];
  39.  
  40.     if (s <= (r - l + 1) * (r - l + 1)) {
  41.         func2(a, l, r);
  42.         op.push_back({l, r});
  43.         for (int i = l; i <= r; i++) {
  44.             a[i] = (r - l + 1);
  45.         }
  46.     } else {
  47.         int mx = -1;
  48.         int pos = -1;
  49.         for (int i = l; i <= r; i++) {
  50.             if (a[i] > mx) {
  51.                 mx = a[i];
  52.                 pos = i;
  53.             }
  54.         }
  55.  
  56.         if (pos != l)
  57.             func(a, l, pos - 1);
  58.  
  59.         if (pos != r)
  60.             func(a, pos + 1, r);
  61.     }
  62. }
  63.  
  64. int main() {
  65.     int n;
  66.     cin >> n;
  67.     vector<int> a(n);
  68.     for (int& i : a)
  69.         cin >> i;
  70.  
  71.     func(a, 0, n - 1);
  72.     int s = 0;
  73.     for (int i : a)
  74.         s += i;
  75.  
  76.     cout << s << " " << op.size() << "\n";
  77.  
  78.     for (auto [l, r] : op)
  79.         cout << l + 1 << " " << r + 1 << "\n";
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement