Advertisement
FreakSkipper

D. Little Girl

Oct 8th, 2020
1,208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.19 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define vi vector<int>
  6. #define ll long long
  7. #define pb push_back
  8. #define mp make_pair
  9. #define ii pair<int,int>
  10.  
  11. int main() {
  12.     int n, q;
  13.  
  14.     cin >> n >> q;
  15.     vi v(n);
  16.  
  17.     for (int i = 0; i < n; i++) {
  18.         cin >> v[i];
  19.     }
  20.  
  21.     vi delta(n);
  22.     for (int i = 0; i < q; i++) {
  23.         int l, r;
  24.         cin >> l >> r;
  25.         l--; r--;
  26.  
  27.         delta[l]++;
  28.         if (r+1 <= n) delta[r+1]--;
  29.     }
  30.  
  31.     vector<ii> prior(n);
  32.     int atual = 0;
  33.     for (int i = 0; i < n; i++) {
  34.         atual += delta[i];
  35.         prior[i].first = atual;
  36.         prior[i].second = i;
  37.     }
  38.  
  39.     sort(v.begin(), v.end(), greater<int>());
  40.     sort(prior.begin(), prior.end(), [](const ii& a, const ii& b) -> bool {
  41.         return a.first > b.first;
  42.     });
  43.  
  44.     vi v_final(n);
  45.     for (int i = 0; i < n; i++) {
  46.         v_final[prior[i].second] = v[i];
  47.     }
  48.  
  49.     vector<ll> soma(n);
  50.     for (int i = 0; i < n; i++) {
  51.         soma[prior[i].second] = v_final[prior[i].second] * prior[i].first;
  52.     }
  53.  
  54.     for (int i = 1; i < n; i++) {
  55.         soma[i] += soma[i-1];
  56.     }
  57.  
  58.     cout << soma[n - 1] << endl;
  59.  
  60.     return 0;
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement