Advertisement
ivnikkk

Untitled

Dec 19th, 2021
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.93 KB | None | 0 0
  1. #include <vector>
  2. #include<iostream>
  3. #include <algorithm>
  4. #include <cmath>
  5. #include <iomanip>
  6. #include <fstream>
  7. #include <string>
  8. #include <set>
  9. #include <deque>
  10. #include<stack>
  11. #include <queue>
  12. #include <map>
  13. #include <bitset>
  14. #include <random>
  15. #include <cassert>
  16. #include <unordered_map>
  17. #include <unordered_set>
  18. using namespace std;
  19. typedef long long             ll;
  20. typedef unsigned long long     ull;
  21. typedef long double            ld;
  22. #define endl              "\n"
  23. #define all(a)            a.begin(), a.end()
  24. #define allr(a)           a.rbegin(), a.rend()
  25. #define pb                push_back
  26. #define F                 first
  27. #define S             second
  28. ll inf = 1e18;
  29. const ll c = 330;
  30. void push(vector<ll>& x, vector<ll>& y, vector<ll>& l, vector<ll>& r, vector<ll>& prefix, ll i) {
  31.     prefix[l[i]] += x[i], prefix[l[i] + 1] -= x[i], prefix[r[i] + 1] -= x[i], prefix[r[i] + 2] += x[i];
  32.     prefix[l[i] + 1] += y[i], prefix[r[i] + 1] -= y[i], prefix[r[i] + 1] -= (r[i] - l[i]) * y[i], prefix[r[i] + 2] += (r[i] - l[i]) * y[i];
  33. }
  34. void solve() {
  35.     ll  n;
  36.     cin >> n;
  37.     vector<ll> a(n);
  38.     vector<ll> b(n);
  39.     for (ll i = 0; i < n; i++)
  40.         cin >> a[i];
  41.     for (ll i = 0; i < n; i++)
  42.         cin >> b[i];
  43.     vector<ll> ans(n, -1), cur(n, 0), prefix(n + 4, 0);
  44.     for (ll i = 0; i < n; i++) {
  45.         if (a[i] >= b[i])
  46.             ans[i] = 0;
  47.         cur[i] = a[i];
  48.     }
  49.     ll m;
  50.     cin >> m;
  51.     vector<ll> l(m), r(m), x(m), y(m);
  52.     for (ll i = 0; i < m; i++) {
  53.         cin >> l[i] >> r[i] >> x[i] >> y[i];
  54.         --l[i], --r[i];
  55.     }
  56.     ll last_block = 0;
  57.     for (ll i = 0; i <= m; i++) {
  58.         if ((i % c == 0) && i > 0 || i == m) {
  59.             ll cnt = 0;
  60.             for (ll j = 0; j < n; j++) {
  61.                 cnt += prefix[j];
  62.                 prefix[j] = cnt;
  63.             }
  64.             cnt = 0;
  65.             for (ll j = 0; j < n; j++) {
  66.                 cnt += prefix[j];
  67.                 prefix[j] = 0;
  68.                 if (cnt + cur[j] >= b[j] && ans[j] == -1) {
  69.                     ll start = cur[j];
  70.                     ll to = last_block + c;
  71.                     for (ll f = last_block; f < min(m, to); f++) {
  72.                         if (j >= l[f] && j <= r[f])
  73.                             start += x[f] + (j - l[f]) * y[f];
  74.                         if (start >= b[j]) {
  75.                             ans[j] = f + 1;
  76.                             break;
  77.                         }
  78.                     }
  79.                 }
  80.                 cur[j] += cnt;
  81.             }
  82.             last_block += c;
  83.         }
  84.         if (i == m) {
  85.             for (auto& jj : ans)
  86.                 cout << jj << ' ';
  87.             return;
  88.         }
  89.         push(x, y, l, r, prefix, i);
  90.     }
  91.     for (auto& i : ans)
  92.         cout << i << ' ';
  93. }
  94. signed main() {
  95.     ios_base::sync_with_stdio(false);
  96.     cin.tie(nullptr);
  97.     ll t = 1;
  98.     //cin >> t;
  99.     while (t--) {
  100.         solve();
  101.     }
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement