Submission #1210795

#TimeUsernameProblemLanguageResultExecution timeMemory
1210795_callmelucianDungeon 3 (JOI21_ho_t5)C++17
11 / 100
4091 ms3568 KiB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;
using ld = long double;
using pl = pair<ll,ll>;
using pii = pair<int,int>;
using tpl = tuple<int,int,int>;

#define all(a) a.begin(), a.end()
#define filter(a) a.erase(unique(all(a)), a.end())

const int mn = 2e5 + 5;
ll a[mn], b[mn];

ll solve (int l, int r, int U) {
    map<ll,ll> mp;
    vector<int> erased;
    ll sumCands = 0, ans = 0;

    for (int i = l; i <= r; i++) {
        if (a[i] > U) return -1;
        mp[b[i]] += U, sumCands += U;
        for (auto it = mp.rbegin(); it != mp.rend() && sumCands > U; it++) {
            ll subtract = min(it->second, sumCands - U);
            sumCands -= subtract, it->second -= subtract;
            if (!it->second) erased.push_back(it->first);
        }
        for (int u : erased) mp.erase(u);
        erased.clear();

        ll used = a[i];
        for (auto it = mp.begin(); it != mp.end() && used > 0; it++) {
            ll subtract = min(it->second, used);
            used -= subtract, it->second -= subtract, sumCands -= subtract;
            ans += 1LL * it->first * subtract;
            if (!it->second) erased.push_back(it->first);
        }
        for (int u : erased) mp.erase(u);
        erased.clear();
    }
    return ans;
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);

    int n, m; cin >> n >> m;
    for (int i = 1; i <= n; i++) cin >> a[i];
    for (int i = 1; i <= n; i++) cin >> b[i];

    for (int i = 0; i < m; i++) {
        int l, r, U; cin >> l >> r >> U;
        cout << solve(l, r - 1, U) << "\n";
    }

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...