QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#681323#9528. New Energy Vehicleucup-team5141#WA 0ms3616kbC++231.9kb2024-10-27 05:10:482024-10-27 05:10:49

Judging History

This is the latest submission verdict.

  • [2024-10-27 05:10:49]
  • Judged
  • Verdict: WA
  • Time: 0ms
  • Memory: 3616kb
  • [2024-10-27 05:10:48]
  • Submitted

answer

#include<bits/stdc++.h>

#define ll long long 
#define pb push_back
#define ff first
#define ss second
#define ld long double

using namespace std;

int main(){
    #ifdef LOCAL
    freopen("in.txt", "r", stdin);
    #endif
    ios::sync_with_stdio(NULL);
    cin.tie(0);
    cout.tie(0);

    int tt; cin >> tt;
    while (tt--) {
        int n, m; cin >> n >> m;
        vector<int> a(n), d(m+1), b(m+1);

        vector<vector<int>> c(n, vector<int>());

        for (int i=0; i<n; ++i) cin >> a[i];
        vector<int> charge = a;
        for (int i=1; i<=m; ++i) {
            cin >> d[i] >> b[i];
            b[i]--;

            c[b[i]].pb(i);
        }
        for (int i=0; i<n; ++i) reverse(c[i].begin(), c[i].end());
        set<pair<int, int>> s;
        for (int i=0; i<n; ++i) {
            int p = c[i].size() ? c[i].back() : m; 
            s.insert({p, i});
        }

        ll ans = 0;
        for (int i=1; i<=m; ++i) {
            int rem = d[i] - d[i-1];
            while (s.size() && rem) {
                pair<int, int> cur = *s.begin();
                s.erase(s.begin());
                //cout << cur.ss << ' ' << rem << ' ' << charge[cur.ss] << endl;

                int mn = min(charge[cur.ss], rem);
                rem -= mn;
                charge[cur.ss] -= mn;
                ans += mn;

                if (charge[cur.ss]) s.insert(cur);
            }

            if (rem) break;

            if (s.count({i, b[i]})) s.erase({i, b[i]});

            c[b[i]].pop_back();
            charge[b[i]] = a[b[i]];

            if (c[b[i]].size()) s.insert({c[b[i]].back(), b[i]});
            else s.insert({m, b[i]});
        }

        while (s.size()) {
            ans += charge[s.begin()->ss];
            s.erase(s.begin());
        }
        cout << ans << '\n';
    }
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3616kb

input:

2
3 1
3 3 3
8 1
2 2
5 2
1 2
2 1

output:

12
9

result:

ok 2 lines

Test #2:

score: -100
Wrong Answer
time: 0ms
memory: 3472kb

input:

6
3 2
2 2 2
6 1
7 1
2 2
3 3
2 1
6 2
2 3
2 2
5 1
7 2
9 1
2 2
3 3
2 1
6 2
1 1
999999999
1000000000 1
1 1
1000000000
1000000000 1

output:

9
9
4
9
999999999
2000000000

result:

wrong answer 2nd lines differ - expected: '11', found: '9'