Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <vector>
- #include<iostream>
- #include <algorithm>
- #include <cmath>
- #include <iomanip>
- #include <fstream>
- #include <string>
- #include <set>
- #include <deque>
- #include<stack>
- #include <queue>
- #include <map>
- #include <bitset>
- #include <random>
- #include <cassert>
- #include <unordered_map>
- #include <unordered_set>
- using namespace std;
- typedef long long ll;
- typedef unsigned long long ull;
- typedef long double ld;
- #define endl "\n"
- #define all(a) a.begin(), a.end()
- #define allr(a) a.rbegin(), a.rend()
- #define pb push_back
- #define F first
- #define S second
- ll inf = 1e18;
- const ll c = 330;
- void push(vector<ll>& x, vector<ll>& y, vector<ll>& l, vector<ll>& r, vector<ll>& prefix, ll i) {
- prefix[l[i]] += x[i], prefix[l[i] + 1] -= x[i], prefix[r[i] + 1] -= x[i], prefix[r[i] + 2] += x[i];
- 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];
- }
- void solve() {
- ll n;
- cin >> n;
- vector<ll> a(n);
- vector<ll> b(n);
- for (ll i = 0; i < n; i++)
- cin >> a[i];
- for (ll i = 0; i < n; i++)
- cin >> b[i];
- vector<ll> ans(n, -1), cur(n, 0), prefix(n + 4, 0);
- for (ll i = 0; i < n; i++) {
- if (a[i] >= b[i])
- ans[i] = 0;
- cur[i] = a[i];
- }
- ll m;
- cin >> m;
- vector<ll> l(m), r(m), x(m), y(m);
- for (ll i = 0; i < m; i++) {
- cin >> l[i] >> r[i] >> x[i] >> y[i];
- --l[i], --r[i];
- }
- ll last_block = 0;
- for (ll i = 0; i <= m; i++) {
- if ((i % c == 0) && i > 0 || i == m) {
- ll cnt = 0;
- for (ll j = 0; j < n; j++) {
- cnt += prefix[j];
- prefix[j] = cnt;
- }
- cnt = 0;
- for (ll j = 0; j < n; j++) {
- cnt += prefix[j];
- prefix[j] = 0;
- if (cnt + cur[j] >= b[j] && ans[j] == -1) {
- ll start = cur[j];
- ll to = last_block + c;
- for (ll f = last_block; f < min(m, to); f++) {
- if (j >= l[f] && j <= r[f])
- start += x[f] + (j - l[f]) * y[f];
- if (start >= b[j]) {
- ans[j] = f + 1;
- break;
- }
- }
- }
- cur[j] += cnt;
- }
- last_block += c;
- }
- if (i == m) {
- for (auto& jj : ans)
- cout << jj << ' ';
- return;
- }
- push(x, y, l, r, prefix, i);
- }
- for (auto& i : ans)
- cout << i << ' ';
- }
- signed main() {
- ios_base::sync_with_stdio(false);
- cin.tie(nullptr);
- ll t = 1;
- //cin >> t;
- while (t--) {
- solve();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement